gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:01:36 26 4
gpt4 key购买 nike

我有两个字节数组,来自(在 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����dvJava 结果:��(��$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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com