将字符串编码为HEX
Encode String to HEX
我有将字符串转换为十六进制的函数:
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 HEX:
5b8862a467515b50
不是ANSI Hex:
e5ae88e68aa4e69d91e5ad90
我也搜索过将UFT8转换为ANSI,但没有运气。有人能帮我吗?谢谢
作为一个功能风格的自包含解决方案,您可以使用进行编码
plain.split("")
.map(c => c.charCodeAt(0).toString(16).padStart(2, "0"))
.join("");
空字符串上的split
生成一个数组,每个元素中有一个字符(或者更确切地说,一个UTF-16代码点)。然后我们可以将每个映射到字符代码的十六进制字符串。
然后解码:
hex.split(/('w'w)/g)
.filter(p => !!p)
.map(c => String.fromCharCode(parseInt(c, 16)))
.join("")
这一次,传递给split
的regex捕获两个字符的组,但这种形式的split
将用空字符串穿插它们(捕获的组之间的东西,什么都不是!)。因此使用filter
来移除空字符串。然后map
对每个字符进行解码。
在Node.js上,您可以执行:
const myString = "This is my string to be encoded/decoded";
const encoded = Buffer.from(myString).toString('hex'); // encoded == 54686973206973206d7920737472696e6720746f20626520656e636f6465642f6465636f646564
const decoded = Buffer.from(encoded, 'hex').toString(); // decoded == "This is my string to be encoded/decoded"
我通过下载utf8.js
解决了这个问题
https://github.com/mathiasbynens/utf8.js
则使用上面的CCD_ 14函数:
alert(String2Hex(utf8.encode('守护村子')));
它给了我想要的输出:
e5ae88e68aa4e69d91e5ad90
这应该可以工作。
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);
}
如果您想正确处理UTF8字符串,可以尝试以下方法:
function utf8ToHex(str) {
return Array.from(str).map(c =>
c.charCodeAt(0) < 128
? c.charCodeAt(0).toString(16)
: encodeURIComponent(c).replace(/'%/g,'').toLowerCase()
).join('');
}
function hexToUtf8(hex) {
return decodeURIComponent('%' + hex.match(/.{1,2}/g).join('%'));
}
演示:https://jsfiddle.net/lyquix/k2tjbrvq/
的另一种方法
function toHex(txt){
const encoder = new TextEncoder();
return Array
.from(encoder.encode(txt))
.map(b => b.toString(16).padStart(2, '0'))
.join('')
}
- 将地理编码结果转换为php变量以发布到mysql数据库
- Json在完整日历中对数据进行了编码
- 如何对每个用户每天只允许单击一次的按钮进行编码
- Javascript字符集编码
- 如何在javascript转换编码中将一个动态值从一个表单添加到另一个页面
- base64编码的图像比intranet中的常规图像好吗
- 我不知道我的编码有什么问题.(JavaScript)
- 为什么字符编码对URL很重要
- 如何在做PHP时在base64中动态编码;preg_ replace”;
- 如何将JSON编码的PHP数组发送到同一页面上的数据表
- 如何使Jquery编码的动态下拉菜单与PHP GET变量协调工作
- JavaScript代码,用于在浏览器中显示字节数组中的PDF文件(非base64编码)
- 以HTML文件中的编码形式脱机存储图像
- 从Base64 Ionic编码和解码图像
- 错误编码的Adsense广告正在扼杀我的网站's的性能
- 如何在JS中编码URL并在PHP中解码
- 使用php在html中搜索硬编码的JavaScript变量
- 如何在JavaScript/Node中计算SHA256哈希和Base64字符串编码
- 将字符串编码为HEX
- 如何在NodeJS中生成HEX编码的CMA-CAES摘要