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

JavaScript中如何将含编码字符的字符串转为可读形式?

JavaScript 转义UTF-8编码字符串为可读文本的实现方案

针对API返回的带\xXX格式UTF-8字节转义的字符串(如Universit\xc3\xa0 di Parma),可以通过以下两种常见方法转换为可读文本:

方法一:利用decodeURIComponent快速转换

这种方法通过将\xXX替换为URI编码的%XX格式,再用decodeURIComponent解码,实现简单高效:

function decodeUtf8Escape(str) {
  // 将\xXX格式替换为%XX,再解码UTF-8
  return decodeURIComponent(str.replace(/\\x([0-9A-Fa-f]{2})/g, '%$1'));
}

// 示例使用
const encodedStr = "Universit\\xc3\\xa0 di Parma";
const decodedStr = decodeUtf8Escape(encodedStr);
console.log(decodedStr); // 输出:Università di Parma

注意:如果输入字符串在代码中是直接写的单转义(如"Universit\xc3\xa0 di Parma"),JS引擎会自动将其解析为对应的字符,此时不需要额外处理;但如果是API返回的字符串包含字面量的\x(即代码中表现为双反斜杠\\x),则需要用上述方法处理。

方法二:使用TextDecoder处理复杂场景

对于包含普通文本和转义字节混合的复杂字符串,推荐使用现代的TextDecoderAPI,它能更精准地处理UTF-8字节序列:

function decodeUtf8Escape(str) {
  // 拆分字符串为普通文本和转义片段
  const parts = str.split(/(\\x[0-9A-Fa-f]{2})/);
  const byteArray = [];
  const encoder = new TextEncoder();

  for (const part of parts) {
    if (part.startsWith('\\x')) {
      // 将\xXX转换为十进制字节
      byteArray.push(parseInt(part.slice(2), 16));
    } else {
      // 将普通文本转换为UTF-8字节
      byteArray.push(...encoder.encode(part));
    }
  }

  // 解码字节数组为UTF-8文本
  const decoder = new TextDecoder('utf-8');
  return decoder.decode(new Uint8Array(byteArray));
}

// 示例使用
const encodedStr = "Universit\\xc3\\xa0 di Parma";
console.log(decodeUtf8Escape(encodedStr)); // 输出:Università di Parma

这种方法能同时处理普通文本和转义字节的混合内容,兼容性好(支持ES2017及以上环境)。

内容的提问来源于stack exchange,提问作者Damiano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:27:21