簡體   English   中英

如何根據字節大小限制拆分包含非 ascii 字符的字符串?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM