【问题标题】:NodeJS and Iconv - "ISO-8859-1" to "UTF-8"NodeJS 和 Iconv - “ISO-8859-1” 到 “UTF-8”
【发布时间】:2022-01-01 22:37:26
【问题描述】:

我创建了一个 NodeJS 应用程序,它应该从外部 API-Server 获取一些数据。该服务器仅以 'Content-Type: text/plain;charset=ISO-8859-1' 的形式提供其数据。我通过服务器的 Header-Data 获得了这些信息。

现在对我来说问题是像“ä”、“ö”或“ü”这样的特殊字符显示为 。 我尝试使用 Iconv 将它们转换为 UTF-8,但后来我得到了这些东西 '�'...

我的问题是,我做错了什么?


为了测试,我使用 Postman。这些是我测试所有内容的步骤:

  • 使用 Postman 触发我的 NodeJS 应用程序
  • 应用从 API-Server 请求数据
  • API-Server 向 NodeJS App 发送数据
  • 我的应用程序打印出 API 的原始响应数据,其中已经包含那些奇怪的字符
  • 应用程序然后尝试使用 Iconv 将它们转换为 UTF-8,现在它向我显示了这个 '�' 字符

另一个奇怪的事情: 当我将 Postman 直接连接到 API-Server 时,特殊字符会显示出来,因为它们也没有问题。因此我猜我的应用程序会导致问题,但我看不出在哪里或为什么......


// Javascript 代码:

try {
    const response = await axios.get(
      URL 
      {
        params: params, 
        headers: headers
      }
    );

    var iconv     = new Iconv('ISO-8859-1', 'UTF-8');
    var converted = await iconv.convert(response.data);
    return converted.toString('UTF-8');

  } catch (error) {
    throw new Error(error);
  }

【问题讨论】:

    标签: node.js utf-8 iso-8859-1 iconv charset


    【解决方案1】:

    所以经过一些更深入的研究后,我想出了解决问题的方法。

    所有麻烦的原因似乎在于 axios 或类似的后处理。这是在接收到数据并转换为文本之后以及在为我的 nodejs-application 生成响应之前不久关闭的步骤。

    我所做的是将axios的GET方法的“responseType”定义为“ArrayBuffer”。因此,需要对 axios 进行调整,如下所示:

    var resArBuffer = await axios.get(
          URL, 
          {
            responseType: 'arraybuffer',
            params: params, 
            headers: headers
          }
        );
    

    由于 JavaScript 非常棒,ArrayBuffer 本身提供了一个 toString() 方法,通过自己的定义将数据从 ArrayBuffer 转换为 String:

        var response = resArBuffer.data.toString("latin1");
    

    另一件值得一提的是,我使用了“latin1”而不是“ISO-8859-1”。不要问我为什么,一些消息来源甚至建议使用“cp1252”代替,但“latin1”在这里适合我。

    不幸的是,这还不够,因为我需要 UTF-8 格式的文本。使用 "toString('utf-8')" 本身也是错误的方法,因为它仍然会打印 "�"-Symbols。解决方法很简单。我使用“Buffer.from(...)”将“latin1”定义的文本转换为“utf-8”文本:

        var text = Buffer.from(response, 'utf-8').toString();
    

    现在我得到了所需的 UTF-8 转换文本。我希望这个帖子可以帮助其他人,因为这些信息对我来说分布在许多不同的帖子中。

    【讨论】:

      猜你喜欢
      • 2011-04-07
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 2014-11-24
      • 1970-01-01
      相关资源
      最近更新 更多