繁体   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