【发布时间】:2012-03-07 23:17:13
【问题描述】:
如果我使用以下方法将 Javascript 中的 Bytearray 转换为字符串:
convertByteArrayToString: function(byteArray)
{
var s = '';
for(var i = 0;i < byteArray.length;i++)
{
s += String.fromCharCode(byteArray[i])
}
return s;
},
然后如何在 C# 中将此字符串转换回字节数组?
我已经尝试了以下所有三种方法:
System.Text.UnicodeEncoding encoding = new System.Text.UnicodeEncoding().GetBytes(myString);
System.Text.UTF32Encoding encoding = new System.Text.UTF32Encoding().GetBytes(myString);
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding().GetBytes(myString);
最接近的是第一个,但它返回一个字节数组,该数组的长度是原始数组的两倍,数组中的每个其他元素都是 0,有时是一两个不正确的值。
据我所知,String.fromCharCode 在 Unicode 中工作,那么如何让它与 C# 互操作?
这让我发疯了!
编辑:
这是一个例子,
原始字节数组: [139、104、166、35、8、42、216、160、235、153、23、143、105、3、24、255]
我的函数将其转换为: "h¦#*Ø ëiÿ"
在 C# 中,尝试将此字符串解码为字节数组会产生以下结果:
使用 System.Text.UnicodeEncoding 给出: [142,0,139,0,104,0,166,0,35,0,8,0,42,0,216,0,32,0,235,0,153,0,23,0,143,0,105,0,30,24,0,255,0]
【问题讨论】:
-
这不是“两倍的长度”。 C# 中的字符串是 little-endian UTF16,因此 30 个
chars的字符串长度为 60 个字节。最常见的字母数字字符低于 0xFF,因此第二个(更重要的)字节为 0。 -
重新标记,编码不是加密。 Unicode 字符点可以进行字符编码,例如使用 UTF-8 或 UTF-16。编码是编码数据的方法(通常隐含字节),例如Base-64 或十六进制。加密是一种创建机密性的方法,例如AES。
标签: c# javascript string unicode encoding