Joh*_*nan 6 javascript hex utf-8
我有我的功能将字符串转换为十六进制:
function encode(str){
str = encodeURIComponent(str).split('%').join('');
return str.toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)
例:
????
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;
}
Run Code Online (Sandbox Code Playgroud)
然后尝试上面的中文字符,但它输出UTF-8 HEX:
5b8862a467515b50
不是ANSI Hex:
e5ae88e68aa4e69d91e5ad90
我也搜索过将UFT8转换为ANSI但没有运气.有人可以帮帮我吗?谢谢!
const myString = "This is my string to be encoded/decoded";
const encoded = new Buffer(myString).toString('hex'); // encoded === 54686973206973206d7920737472696e6720746f20626520656e636f6465642f6465636f646564
const decoded = new Buffer(encoded, 'hex').toString(); // decoded === "This is my string to be encoded/decoded"
Run Code Online (Sandbox Code Playgroud)
作为功能风格的独立解决方案,您可以使用以下方式进行编码:
plain.split("")
.map(c => c.charCodeAt(0).toString(16).padStart(2, "0"))
.join("");
Run Code Online (Sandbox Code Playgroud)
在split上一个空字符串产生在每个元件中的一个字符(或更确切地说,一个UTF-16码点)的阵列。然后我们可以将每个映射到字符代码的 HEX 字符串。
然后解码:
hex.split(/(\w\w)/g)
.filter(p => !!p)
.map(c => String.fromCharCode(parseInt(c, 16)))
.join("")
Run Code Online (Sandbox Code Playgroud)
这次传递给的正则表达式split捕获两个字符的组,但是这种形式的split将用空字符串散布它们(捕获组“之间”的东西,这没什么!)。Sofilter用于删除空字符串。然后map解码每个字符。
我通过下载解决了utf8.js
https://github.com/mathiasbynens/utf8.js
\n然后使用String2Hex上面的函数:
alert(String2Hex(utf8.encode(\'\xe5\xae\x88\xe6\x8a\xa4\xe6\x9d\x91\xe5\xad\x90\')));\nRun Code Online (Sandbox Code Playgroud)\n它给了我我想要的输出:
\ne5ae88e68aa4e69d91e5ad90
| 归档时间: |
|
| 查看次数: |
23695 次 |
| 最近记录: |