[英]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.