2016-04-15 72 views
2

我有我的函數的字符串轉換爲十六進制:使用Javascript - 編碼字符串爲十六進制

function encode(str){ 
    str = encodeURIComponent(str).split('%').join(''); 
    return str.toLowerCase(); 
} 

例如:

守護村子

alert(encode('守護村子'));

輸出將是:

e5ae88e68aa4e69d91e5ad90

它適用於中文字符。但是當我用英文字母做它

alert(encode('Hello World'));

它輸出:

hello20world

我已經嘗試了本作將字符串轉換爲十六進制:

function String2Hex(tmp) { 
    var str = ''; 
    for(var i = 0; i < tmp.length; i++) { 
     str += tmp[i].charCodeAt(0).toString(16); 
    } 
    return str; 
} 

然後試圖在上述中國漢字,但它輸出的UTF-8十六進制:

5b8862a467515b50

不是ANSI十六進制:

e5ae88e68aa4e69d91e5ad90

我還搜查轉換UFT8到ANSI,但沒有運氣。 任何人都可以幫助我?謝謝!

+0

檢查出這個【答案】(http://stackoverflow.com/questions/21647928/javascript- Unicode的字符串到十六進制)。我想這可能是你要找的。 – nlloyd

+0

謝謝,但它不是答案,它類似於上面的'String2Hex'函數,它給出utf8十六進制代碼,而不是ansi十六進制代碼。不過謝謝。 –

+0

嘗試使用'tmp = unescape(encodeURIComponent(str))'將文本轉換爲latin1' –

回答

1

我有通過下載utf8.js

https://github.com/mathiasbynens/utf8.js

然後使用上面的String2Hex功能解決這個問題:

alert(String2Hex(utf8.encode('守護村子')));

給我我想要的輸出:

e5ae88e68aa4e69d91e5ad90

+0

像我這樣的人看這個問題也應該考慮以下幾點:http:// stackoverflow。com/questions/32965971/javascript-charcodeat -javascript-in-jsfiddle-and-in-local-file – haakym

+0

任何尋找沒有第三部分的答案都可以參考[http://stackoverflow.com/questions/21647928/javascript- unicode-string-to-hex](http://stackoverflow.com/questions/21647928/javascript-unicode-string-to-hex) – nbi

+0

這個答案不是真正的自包含。它完全依賴外部資源... –

0

這應該工作

var str="some random string"; 
var result = ""; 
    for (i=0; i<str.length; i++) { 
     hex = str.charCodeAt(i).toString(16); 
     result += ("000"+hex).slice(-4); 
    } 
相關問題