如果我使用下面的方法在Javascript转换ByteArray的字符串:的Javascript C#Unicode字符串 - headscratcher
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]
My功能将其转换为: “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#中的字符串是小端的UTF16,所以30个字符串的长度为60个字节。最常见的字母数字字符数低于0xFF,因此第二个(更重要)字节为0. – 2012-02-16 14:47:31
重新标记,编码不是加密。 Unicode字符点可以是字符编码的,例如,使用UTF-8或UTF-16。编码是编码数据的方法(通常暗示字节),例如, Base-64或十六进制。加密是一种创建机密性的方法,例如AES。 – 2012-02-18 14:38:25