Java UTF-8 字符串与 C# UTF-8 字符串不匹配

标签 java c# utf-8

我有两个来自字符串的字节数组(在 C# 和 Java 中)。当我转换数组时,结果不匹配。这可能是什么原因?这个问题不是恒定的。有时它会产生相同的结果。

 C#:
[0] 148 
[1] 70  
[2] 38  
[3] 173 
[4] 249 
[5] 227 
[6] 183 
[7] 106 
[8] 57  
[9] 25  
[10] 181    
[11] 13 
[12] 192    
[13] 176    
[14] 128    
[15] 164    

   Java :


    0 = -108 
    1 = 70
    2 = 38
    3 = -83
    4 = -7
    5 = -29
    6 = -73
    7 = 106
    8 = 57
    9 = 25
    10 = -75
    11 = 13
    12 = -64
    13 = -80
    14 = -128
    15 = -92

C# 结果:�F&���j9�\r����

Java 结果:�F&���j9�0��

编辑:

转换器代码;

C# -
String result = UTF8Encoding.UTF8.GetString(byteArray);

Java: 
String result = new String(byteArray, "UTF-8");

*Edit-2:它真正的转换。

C# :
        [0] 239 
        [1] 195 
        [2] 40  
        [3] 19  
        [4] 185 
        [5] 36  
        [6] 77  
        [7] 132 
        [8] 182 
        [9] 122 
        [11]    173 
        [12]    12  
        [13]    191 
        [14]    100 
        [15]    118 
Java :

0 = -17
1 = -61
2 = 40
3 = 19
4 = -71
5 = 36
6 = 77
7 = -124
8 = -74
9 = 122
10 = -70
11 = -83
12 = 12
13 = -65
14 = 100
15 = 118

C# 结果:��(�$M��z���dv Java 结果:��(��$M��z���dv*

最佳答案

我假设上面显示的输出是与 C# 和 Java 中的字符串相对应的字节数组。

byte in Java is a signed type (between -128 and 127) ,这解释了某些字节的负值。

看起来 Java 中的所有正值都与相应的 C# 值匹配,只有 Java 中的负值与相应的 C# 值不匹配。原因是C# bytes are unsigned (between 0 and 255)

如果打印与 Java 字节对应的无符号值,您应该得到与 C# 中相同的输出:

for (byte b : byteArray)
    System.out.println(b & 0xff);

关于Java UTF-8 字符串与 C# UTF-8 字符串不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45026966/

相关文章:

c# - 如何将字符串转换为整数或小数?

perl - Unicode 规范化 - 文本文件中的文件名与文件系统上的文件名

java - public static AutocompleteSessionToken newInstance () 是否返回相同的实例?

java - Spark 将数组列分解为列

java - 将对象从类传递到 Activity

java - Android开发与hibernate+spring

c# - 启动 SQL Server 导入/导出向导?

c# - 空授权 header 会导致 400 错误。 IIS 7.5

java - 奇怪的 JAVA UTF-8 编码行为,新的 String(bytes ,"UTF-8") 在大多数相似的设置上给出不同的结果

javascript - AngularJS 路由中的 Unicode/utf-8 字符