【发布时间】:2016-09-12 01:50:03
【问题描述】:
我在 c# 和 Java 之间传递数据,分 4 个阶段进行转换:
- 转字节数组
- 到字符串(只需将每个字节添加为字符)
- 到
UTF8字节 4 到base64字符串
我发现 java 转换为 UTF8 与 c# 不同。
我将跳过下面代码中的base64 转换。
Java 代码:
// The result is [-26, 16, 0, 0]
byte[] bytes = ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(4326).array();
StringBuilder sb = new StringBuilder(bytes.length);
for (byte currByte : bytes) {
sb.append((char) currByte);
}
// The result is [-17, -90, -66, 16, 0, 0]
byte[] utf8Bytes = sb.toString().getBytes("UTF-8");
C#代码
MemoryStream objMemoryStream = new MemoryStream();
BinaryWriter objBinaryWriter = new BinaryWriter(objMemoryStream);
objBinaryWriter.Write(4326);
// The result [230, 16, 0, 0]
byte[] objByte = objMemoryStream.ToArray();
StringBuilder objSB = new StringBuilder();
foreach (byte objCurrByte in objByte)
{
objSB.Append((char)objCurrByte);
}
string strBytes = objSB.ToString();
objBinaryWriter.Close();
objBinaryWriter.Dispose();
// The result is [195, 166, 16, 0, 0]
var result = UTF8Encoding.UTF8.GetBytes(strBytes);
虽然输入数组/字符串相同,但两端数组不同。 (Java 只是使用有符号字节来显示 - 但值是相同的)
我不允许更改 c# 代码,因为它已被客户端使用..
我该如何调整,我的 java 代码有什么问题?
注意:Java 设法从 c# 读取结果 base64 字符串,但随后它使用相同的数据生成不同的字符串,c# 无法正确读取..
【问题讨论】: