Java日语字符串大小(以字节为单位)

时间:2013-06-23 17:05:21

标签: java encoding

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

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

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

3 个答案:

答案 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