2

我正在尝试计算日文字符'汉字仮名交じり文'的字符串的长度:

    String testStr = "漢字仮名交じり文";
    try {
        System.out.println("Length : " + testStr.getBytes("UTF-16").length);
    }
        catch(Exception ex) {
        ..... 
    }

字符串中有 8 个字符,这段摘录打印:18。为什么是 18?

4

3 回答 3

7

它是 18,因为您有 8 个字符,每个字符都编码为 UTF-16,这意味着每个字符 2 个字节。因此,这是 8*2=16 加上插入到字节数组开头的 2 字节 BOM!

这是您的字节序列(feff 是所谓的 BOM 或字节顺序标记,它允许检测字节序列是使用 little endiion 还是 big endian 字节顺序):

fe ff 6f 22 5b 57 4e ee 54 0d 4e a4 30 58 30 8a 65 87

这就是我打印字节序列的方式(它是粗略的代码,当然只是为了测试它):

final String text = "漢字仮名交じり文";
byte[] bytes = text.getBytes("UTF-16");
for (int i=0; i<bytes.length; ++i) {
    System.out.printf("%02x ", bytes[i]);
}
于 2013-06-23T18:48:15.533 回答
4

您正在获取字节数,而不是字符数。根据编码(您使用 UTF-16),一个字符可以是 1 到 4 个字节。

于 2013-06-23T17:09:21.537 回答
1

如果您真的想找到给定字符串中的字符数,那么一种简单的方法(不是最佳方法)是

   String testStr = "漢字仮名交じり文";
   System.out.println(testStr.toCharArray().length);

打印 8

于 2013-06-23T17:29:44.403 回答