码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript如何将中文转换Unicode16字节数组

时间:2015-04-29 17:08:44      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:javascript   中文   字节   数组   unicode   

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

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

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

2、若字符是双字节字符,例如中文,则用一个大于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;
}


Javascript如何将中文转换Unicode16字节数组

标签:javascript   中文   字节   数组   unicode   

原文地址:http://blog.csdn.net/mole/article/details/45367787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!