为什么c#和java unicode不同

时间:2013-10-28 05:51:07

标签: java unicode

  

Str = test

 The results are not the same I do not know why.

Java代码

   int[] inData = getInt(Str.getBytes("**unicode**"));
   for (int i = 0; i < inData.length; i++) {
    System.out.println("====EncryStrHex==inData[i]==" + inData[i]);
   }

结果

    *========*******Encryints====-2
    ========*******Encryints====-1
    ========*******Encryints====0
    ========*******Encryints====116
    ========*******Encryints====0
    ========*******Encryints====101
    ========*******Encryints====0
    ========*******Encryints====115
    ========*******Encryints====0
    ========*******Encryints====116*

c#c​​ode

    byte[] inData = Encoding.**Unicode**.GetBytes(Str);
    for (int i = 0; i < inData.Length; i++) {
        Console.WriteLine("====EncryStrHex==inData[i]==" + inData[i]);
    }

结果

    *========*******Encryints====116
    ========*******Encryints====0
    ========*******Encryints====101
    ========*******Encryints====0
    ========*******Encryints====115
    ========*******Encryints====0
    ========*******Encryints====116
    ========*******Encryints====0*

1 个答案:

答案 0 :(得分:2)

此处似乎存在两个问题(不包括示例无法实际生成输出的方式)。

  1. 您的java示例使用UTF16(big endian)编码数据,而C#示例使用UTF16,little endian,它解释了零字节的不同位置。

  2. 您的java示例在数据前面加上BOM(0xFFFE)字节顺序标记,用于显示使用的UTF编码。 UTF 8,16(BE和LE)和32(BE和LE)都为该字符生成不同的字节序列。关于这是否是一个好主意存在争论。