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

之前由于项目的需要,需要把带有中文的字符串转换成字节数组和图片数据合并后,以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;
}

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » Javascript如何将中文转换UTF16和UTF8字节数组

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡