溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

javascript字符串轉(zhuǎn)換成utf-8編碼的方式有哪些

發(fā)布時間:2021-07-23 17:39:01 來源:億速云 閱讀:574 作者:chen 欄目:web開發(fā)

這篇文章主要講解了“javascript字符串轉(zhuǎn)換成utf-8編碼的方式有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“javascript字符串轉(zhuǎn)換成utf-8編碼的方式有哪些”吧!

javascript字符串轉(zhuǎn)換成utf-8編碼方式有:1、支持window.TextEncoder()的情況,語法“TextEncoder('utf8');”;2、利用encodeURI的編碼進行替換,語法“encodeURI(字符串)”。

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

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

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

輸出的是一個字節(jié)序列:

[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]

又或者是這一個單字節(jié)的字符串:

"\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"
"???????????¢???????¤???£?o?100???é?±"

經(jīng)過不懈的折騰,終于搞明白了,有兩種解決方案:

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

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

這種返回的是一個整數(shù)數(shù)組。

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

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

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')+'\'');
}

感謝各位的閱讀,以上就是“javascript字符串轉(zhuǎn)換成utf-8編碼的方式有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對javascript字符串轉(zhuǎn)換成utf-8編碼的方式有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI