我在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#无法正确读取的不同字符串..
答案 0 :(得分:1)
您遇到的问题是SELECT FirstName, LastName
FROM Employee A, Invoice B
WHERE A.EmployeeId = B.CustomerId
是无符号的,但字节已签名。当您执行char
时,您正在执行(char) -26
,而您的目标是(char) (-26 & 0xFFFF)
尝试
(char) (-26 & 0xFF)