Javascript如何将中文转换UTF16和UTF8字节数组
2015-04-29 16:25
489 查看
之前因为项目的需要,需要把带有中文的字符串转换成字节数组和图片数据合并后,以二进制数据上传给服务器端。
之前,看到网上有利用Array.prototype.map.call(str, function (c) { return c.charCodeAt(0); })方法将字符串转换成字节数组,但实测结果表明该方式实现了下列功能:
1、若字符是单字节字符,则用一个小于128的数值来表示。
2、若字符是双字节字符,例如中文,则用一个大于256的数值来表示。
根据测试结果表明,该方式仅仅是将字符串转换成了Unicode编码数组,而非字节数组。
因此,还需要将生成的数组中值切实的转换成双字节来表示。具体代码如下:
根据上述经验,整理了中文转换成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;
}
之前,看到网上有利用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 数字如何转换成中文大写
- UNICODE含中文编码字符串转换UTF8中文字符串
- javascript不同类型数据之间的运算是如何转换的
- [python] 如何将unicode字符串转换为中文
- 在url中进行中文参数传递如何转换
- [JavaScript]一段把客户端的中文字串转换成UTF-8的代码
- 基于Poco的UTF8、UTF16、GBK、Hex之间的转换
- DateTime类型中 DayOfWeek时的英文如何转换成中文(转)
- 用JS如何把utf8转换成Unicode
- Python:如何将文本里的字典里的unicode字符转换成中文
- JavaScript实现阿拉伯数字和中文数字互相转换
- javascript中如何正确将日期(Date)字符串,转换为日期(Date)对象?
- 如何解决GBK的编码的文件中的中文转换成为UTF-8编码的文件而且不乱码
- 如何将json文本转换为JavaScript对象
- javascript如何对中文字符进行url编码
- jquery或javascript如何把日期转换格式
- 在eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文 安装成功后ASCII还是不能转换成中文的,原因是设置里面没有把编码设置为utf8的
- JavaScript如何进行类型转换
- (转载)PHP如何获取中文字符串长度 utf8_strlen()/mb_strlen()
- 中文乱码的解决之道,理清UTF8,UTF16,GB2312,Big5,Unicode之间的关系