0

强度 = 测试

 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# 代码

    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*
4

1 回答 1

2

这里似乎有两个问题(不包括示例无法实际生成输出的方式)。

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

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

于 2013-10-28T06:41:16.897 回答