我有两个来自字符串的字节数组(在 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/