2016-04-15 32 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); 
    } 
相关问题