You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:36:08