2

日本語の文字列 '漢字仮名交じり文' の長さを計算しようとしています:

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

文字列には 8 文字があり、この抜粋では : 18 が出力されます。なぜ 18 なのですか?

4

3 に答える 3

7

それぞれ2バイトを意味するUTF-16としてエンコードされた8文字があるため、18です。したがって、これは 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]);
}
于 2013-06-23T18:48:15.533 に答える
1

特定の文字列の文字数を実際に見つけたい場合は、簡単な方法 (最適ではありません) です。

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

プリント 8

于 2013-06-23T17:29:44.403 に答える