JavaScript含扩展拉丁符号的十六进制转ASCII乱码问题求解
问题根因
- 你提供的十六进制串为UTF-16BE编码格式,每个字符对应4位十六进制值(2字节),原代码每次仅读取2位十六进制(1字节)做转换,自然无法正确解析码点超过0xFF的扩展拉丁字符
- 原转换逻辑只适配单字节编码(如ASCII、ISO-8859-1),不支持多字节的Unicode编码转换
修正后代码
function convertHexadecimal(hexx){ let index = hexx.indexOf("~"); let strInfo = hexx.substring(0, index+1); let strMessage = hexx.substring(index+1); let hex = strMessage.toString(); let str = ''; // 步长改为4,每次读取对应单个字符的4位十六进制值 for (let i = 0; i < hex.length; i += 4){ str += String.fromCharCode(parseInt(hex.substr(i, 4), 16)); } console.log("Zpráva: " + str); let strFinal = strInfo + str; return strFinal; }
补充说明
拿你提供的十六进制串测试,上述代码转换后可以正确输出String has letters with diacritics: č,š,ř, ...,包含的变音字符均可正常显示。如果后续需要处理表情符号等码点超过0xFFFF的字符,可将String.fromCharCode替换为String.fromCodePoint即可。
内容的提问来源于stack exchange,提问作者Deesak
相关产品推荐
相关产品推荐

