我正在尝试计算日文字符'汉字仮名交じり文'的字符串的长度:
String testStr = "漢字仮名交じり文";
try {
System.out.println("Length : " + testStr.getBytes("UTF-16").length);
}
catch(Exception ex) {
.....
}
字符串中有 8 个字符,这段摘录打印:18。为什么是 18?
它是 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]);
}
您正在获取字节数,而不是字符数。根据编码(您使用 UTF-16),一个字符可以是 1 到 4 个字节。
如果您真的想找到给定字符串中的字符数,那么一种简单的方法(不是最佳方法)是
String testStr = "漢字仮名交じり文";
System.out.println(testStr.toCharArray().length);
打印 8