将16进制表示的编码转为中文
关于编码转中文,博主在工作中遇到一个奇葩的问题
16进制表示的编码,如\xe5\x93\x88,一般情况下直接把’\x’替换成’%',再使用decodeURIComponent转码就ok了
decodeURIComponent('%e5%93%88') // 输出为“哈”
但事实上\xe5\x93\x88无法直接转换成%e5%93%88
原因是\xe5已经有表示的字符了
console.log('\xe5') // 输出为'å'
既然被转换了,那就获取它的Unicode值,然后转换成16进制数,再加上%
console.log('\xe5'.charCodeAt()) // 229
console.log('\xe5'.charCodeAt().toString(16)) // e5
思路有了,那么完整解决方法如下
function decodeToChinese(code) {
let arr = [];
// 将\xe5\x93\x88 转成 [e5, 93, 88]
for (let i = 0; i < code.length; i++) {
arr.push(code.charCodeAt(i).toString(16));
}
// 将16进制数拼接起来 [e5, 93, 88] => %e5%93%88
let codeStr = arr.map((item) => item = `%${ item }`).join('');
let result = '';
try {
result = decodeURIComponent(codeStr);
} catch (error) {
result = code;
}
return result;
}
console.log(decodeToChinese('\xe5\x93\x88')) // 输出 哈