Java子串打破编码

n00*_*bot 5 java substring utf-8

我用UTF-8编码从流中读取了一些数据

String line = new String(byteArray, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

然后试着找一些子序列

int startPos = line.indexOf(tag) + tag.length();
int endPos   = line.indexOf("/", startPos);
Run Code Online (Sandbox Code Playgroud)

并削减它

String name = line.substring(startPos, endPos);
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,它工作正常,但有时结果被打破.例如,输入名称,如"????????"我有像值"?????????","?????????","?????????"等好像代理对随机打破了某些原因.我从1000中得到了4次.

怎么解决?我是否需要使用其他String方法而不是indexOf()+ substring()或者对我的结果使用一些编码/解码魔法?

and*_*rel 1

出现此问题的原因是流被读取为字节块,有时会分割多字节 UTF-8 字符。

通过将 InputStream 包装在 InputStreamReader 中,您将读取字符块(而不是字节块),并且多字节 UTF-8 字符将保留下来。