Javascript如何將中文轉換UTF16和UTF8字節數組
來源:程序員人生 發布時間:2015-06-01 08:48:26 閱讀次數:4634次
之前由于項目的需要,需要把帶有中文的字符串轉換成字節數組和圖片數據合并后,以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;
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈