Javascript如何將中文轉(zhuǎn)換UTF16和UTF8字節(jié)數(shù)組
來源:程序員人生 發(fā)布時(shí)間:2015-06-01 08:48:26 閱讀次數(shù):4647次
之前由于項(xiàng)目的需要,需要把帶有中文的字符串轉(zhuǎn)換成字節(jié)數(shù)組和圖片數(shù)據(jù)合并后,以2進(jìn)制數(shù)據(jù)上傳給服務(wù)器端。
之前,看到網(wǎng)上有益用Array.prototype.map.call(str, function (c) { return c.charCodeAt(0); })方法將字符串轉(zhuǎn)換成字節(jié)數(shù)組,但實(shí)測結(jié)果表明該方式實(shí)現(xiàn)了以下功能:
1、若字符是單字節(jié)字符,則用1個(gè)小于128的數(shù)值來表示。
2、若字符是雙字節(jié)字符,例如中文,則用1個(gè)大于256的數(shù)值來表示。
根據(jù)測試結(jié)果表明,該方式僅僅是將字符串轉(zhuǎn)換成了Unicode編碼數(shù)組,而非字節(jié)數(shù)組。
因此,還需要將生成的數(shù)組中值切實(shí)的轉(zhuǎn)換成雙字節(jié)來表示。具體代碼以下:
var str = "轉(zhuǎn)換測試數(shù)據(jù)";
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;
}
根據(jù)上述經(jīng)驗(yàn),整理了中文轉(zhuǎn)換成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) {
// 未轉(zhuǎn)換的字符
result[k++] = j.charCodeAt(0);
} else {
// 轉(zhuǎn)換成%XX情勢的字符
var bytes = j.split("%");
for (var l = 1; l < bytes.length; l++) {
result[k++] = parseInt("0x" + bytes[l]);
}
}
}
return result;
}
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)