为什么c#和java unicode不同

为什么c#和java unicode不同,java,unicode,Java,Unicode,Str=test Java代码 c#代码 这里似乎有两个问题(不包括示例无法实际生成输出的方式) 您的java示例使用UTF16,big-endian对数据进行编码,而C#示例使用UTF16,little-endian,这解释了零字节的不同位置 您的java示例在数据前面有一个BOM(0xFFFE),即字节顺序标记,用于显示使用了哪个UTF编码。UTF 8、16(BE和LE)和32(BE和LE)都为该字符生成不同的字节序列。关于这是否是一个好主意,有很多争论 BigEndian和LittleEn

Str=test

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

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

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


  • BigEndian和LittleEndian之间的区别是什么?代码不能产生那个输出。还有,究竟是什么?
     The results are not the same I do not know why.
    
       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*
    
        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*