標籤: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位元組數組