我正在尝试计算日语字符串'漢字仮名交じり文‘的长度:
String testStr = "漢字仮名交じり文";
try {
System.out.println("Length : " + testStr.getBytes("UTF-16").length);
}
catch(Exception ex) {
.....
}
字符串中有8个字符,下面的摘录显示: 18。为什么是18?
发布于 2013-06-24 02:48:16
它是18,因为您有8个字符,每个字符编码为UTF-16,这意味着每个字符有2个字节。因此,这是8*2=16加上在字节数组开始处插入的2个字节的BOM!
这是您的字节序列(feff是所谓的BOM或byte Order Mark,它允许检测字节序列是否使用低端字节顺序或高端字节顺序):
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-24 01:09:22
您得到的是字节数,而不是字符数。根据编码(您使用的是UTF-16),一个字符可以是1到4个字节。
发布于 2013-06-24 01:29:44
如果您真的想要查找给定字符串中的字符数,一种简单的方法(不是最佳的)是
String testStr = "漢字仮名交じり文";
System.out.println(testStr.toCharArray().length);
打印8张
https://stackoverflow.com/questions/17263161
复制相似问题