程序员人生 网站导航

Javascript如何将中文转换UTF16和UTF8字节数组

栏目:php教程时间:2015-06-01 08:48:26

之前由于项目的需要,需要把带有中文的字符串转换成字节数组和图片数据合并后,以2进制数据上传给服务器端。

之前,看到网上有益用Array.prototype.map.call(str, function (c) { return c.charCodeAt(0); })方法将字符串转换成字节数组,但实测结果表明该方式实现了以下功能:

1、若字符是单字节字符,则用1个小于128的数值来表示。

2、若字符是双字节字符,例如中文,则用1个大于256的数值来表示。

根据测试结果表明,该方式仅仅是将字符串转换成了Unicode编码数组,而非字节数组。

因此,还需要将生成的数组中值切实的转换成双字节来表示。具体代码以下:

var str = "转换测试数据"; var arr = Array.prototype.map.call(str, function (c) { return c.charCodeAt(0); }); arr = ToUTF16(arr); function ToUTF16(arr) { var result = new Array(); var k = 0; for (var i = 0; i < arr.length; i++) { result[k++] = arr[i] & 0xFF; result[k++] = arr[i] >> 8; } return result; }

根据上述经验,整理了中文转换成UTF16和UTF8的代码以下,在Google的Chrome中测试通过。

function ToUTF16(str) { var result = new Array(); var k = 0; for (var i = 0; i < str.length; i++) { var j = str[i].charCodeAt(0); result[k++] = j & 0xFF; result[k++] = j >> 8; } return result; } function ToUTF8(str) { var result = new Array(); var k = 0; for (var i = 0; i < str.length; i++) { var j = encodeURI(str[i]); if (j.length==1) { // 未转换的字符 result[k++] = j.charCodeAt(0); } else { // 转换成%XX情势的字符 var bytes = j.split("%"); for (var l = 1; l < bytes.length; l++) { result[k++] = parseInt("0x" + bytes[l]); } } } return result; }


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐