[英]How to split a string containing non ascii characters based on the byte size limit?
如何根据字节大小限制拆分包含非 ascii 字符的字符串? 我想拆分以下字符串并添加到列表中,拆分基于大小限制(例如)3 个字节。
这里的问题是扩展 ascii char 需要 2 个字符,拆分后数据变成垃圾,如实际 output 所示。
我想要的是预期的 output 如下所示,如果我们遇到非 ascii 字符,可以只写 2 个字节。 请让我知道如何解决它。 问题:
String words = "Hello woræd æåéøòôóâ";
List<String> payloads = new ArrayList<>();
try( ByteArrayOutputStream outStream = new ByteArrayOutputStream();) {
byte[] chars = words.getBytes(StandardCharsets.UTF_8);
for (byte ch: chars) {
outStream.write(ch);
if (outStream.size() >= 3) {
String s = outStream.toString("UTF-8");
payloads.add(s);
outStream.flush();
outStream.reset();
}
}
payloads.add(outStream.toString("UTF-8"));
outStream.flush();
System.out.println(payloads);
} catch (IOException e) {
e.printStackTrace();
}
实际 Output: [Hel, lo, wor, æd, �, �å, é�, �ò, ô�, �â, ]
预期 output: [Hel, lo, wor, æd, ,æ, å, é, ø, ò, ô, ó, â] ]
它是 UTF-8。 UTF-8 旨在让您可以轻松检测字符边界。
所以:将字符串转换为 UTF-8 字节。
然后回溯,直到第一个排除的字节是合法的“第一个字节”,即不是10xxxxxx。 您现在位于字符边界。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.