我正在尝试计算日文字符串的长度 '汉字仮名交じり文':
String testStr = "漢字仮名交じり文";
try {
System.out.println("Length : " + testStr.getBytes("UTF-16").length);
}
catch(Exception ex) {
.....
}
字符串中有8个字符,此摘录打印:18。为什么是18?
答案 0 :(得分:7)
这是18,因为你有8个字符,每个字符编码为UTF-16,这意味着每个2字节。因此,这是8 * 2 = 16加上在字节数组开头插入的2字节BOM!
这是你的字节序列(feff是所谓的BOM或字节顺序标记,它允许检测字节序列是使用小端或大端字节顺序):
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]);
}
答案 1 :(得分:4)
您正在获取字节计数,这不是字符计数。根据编码(使用UTF-16),字符可以是1到4个字节。
答案 2 :(得分:1)
如果你真的想在给定的字符串中找到字符数,那么一个简单的方法(非最佳)就是
String testStr = "漢字仮名交じり文";
System.out.println(testStr.toCharArray().length);
打印8