代码之家  ›  专栏  ›  技术社区  ›  Almas Abdrazak

Java UTF 16字符串总是使用4字节而不是2字节

  •  2
  • Almas Abdrazak  · 技术社区  · 6 年前

    我有一个简单的测试

    @Test
    public void utf16SizeTest() throws Exception {
        final String test = "п";
        // 'п' = U+043F according to unicode table
        // 43F to binary = 0100 0011 1111 (length is 11)
        // ADD '0' so length should be = 16
        // 0000 0100 0011 1111
        // 00000100(2) 00111111(2)
        //    4(10)  63(10)
        final byte[] bytes = test.getBytes("UTF-16");
        for (byte aByte : bytes) {
            System.out.println(aByte);
        }
    }
    

    如您所见,我首先将“_”转换为二进制文件,然后添加尽可能多的空位,同时 length != 16 .

    A期望输出 4 , 63

    但实际情况是:

    -2
    -1
    4
    63
    

    我做错什么了?

    1 回复  |  直到 6 年前
        1
  •  6
  •   Remy Lebeau    6 年前

    final String test = "ппп";
    

    -2 -1

    -2
    -1
    4
    63
    4
    63
    4
    63
    

    0xFE 0xFF BOM (Byte_order_mark)

    test.getBytes("UTF-16");

    UTF-16LE or UTF-16BE

    final byte[] bytes = test.getBytes("UTF-16BE");
    

    UTF-16 '\uFEFF'

    • ZERO-WIDTH NON-BREAKING SPACE