javascript 字符串進行 utf8 編碼的方法(轉)


實踐中碰到了一個大問題,在 javascript 中,可能有一些中文字符串,我們想將其進行二進制流編碼的時候,需要將其轉換為 utf8 的編碼。

也就是說,輸入的是一個字符串:'呆滯的慢板今天掙了100塊錢'

輸出的是一個字節序列:

[229, 145, 134, 230, 187, 158, 231, 154, 132, 230, 133, 162, 230, 157, 191, 228, 187, 138, 229, 164, 169, 230, 140, 163, 228, 186, 134, 49, 48, 48, 229, 157, 151, 233, 146, 177] 

又或者是這一個單字節的字符串:

"\xE5\x91\x86\xE6\xBB\x9E\xE7\x9A\x84\xE6\x85\xA2\xE6\x9D\xBF\xE4\xBB\x8A\xE5\xA4\xA9\xE6\x8C\xA3\xE4\xBA\x86100\xE5\x9D\x97\xE9\x92\xB1" "呆滞的慢板今天挣了100块钱" 

經過不懈的折騰,終於搞明白了,有兩種解決方案:

1. 支持 window.TextEncoder() 的情況

function str2utf8(str) { encoder = new TextEncoder('utf8'); return encoder.encode(str); } 

這種返回的是一個整數數組。

2. 利用 encodeURI 的編碼進行替換

原理是,如果使用 encodeURI(str),其中如果碰到中文字符之類的,就會按照 utf8 編碼之后變成 %E5%91 這個樣子,我們利用這個,完了之后再將 % 替換成 \x,就得到了單個字節的串。

function str2utf8(str) { return eval('\''+encodeURI(str).replace(/%/gm, '\\x')+'\''); } 

3. 綜合使用

於是,我們綜合來定義一個兼容的方案:

var str2utf8 = window.TextEncoder ? function(str) { var encoder = new TextEncoder('utf8'); var bytes = encoder.encode(str); var result = ''; for(var i = 0; i < bytes.length; ++i) { result += String.fromCharCode(bytes[i]); } return result; } : function(str) { return eval('\''+encodeURI(str).replace(/%/gm, '\\x')+'\''); } 

【轉載請附】願以此功德,回向 >>

原文鏈接:http://www.huangwenchao.com.cn/2015/09/javascript-utf8-encoding.html【javascript 字符串進行 utf8 編碼的方法】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM