将 CSV 转换为 json 时编码不正确

问题描述

我正在尝试将 CSV 转换为 JSON 文件。 转换工作正常,但某些西班牙语字符似乎存在编码问题。 该字符串在 CSV 中显示如下:SÁEZ MARÍA 当我将它导入node js时,它被编码为utf-8,但编码不正确,看起来像这样:S�EZ MAR�A 我尝试将编码转换为 ISO-8859-1,但结果仍然编码不正确:S�EZ MAR�A

我使用 iconv-lite 进行编码:

let test = axios.get(url,options);
        test.then(response => {
          csv({ //Defying the CSV delimiter
            delimiter: ',',trim:true
          })
          .fromString(response.data) //Processing CSV from response
          .then(function(jsonArrayObj){
                var test = iconv.decode(Buffer.from(JSON.stringify(user)),"ISO-8859-1");
                console.log(test);
});

我也尝试过将 Buffer.from().toString() 与所有支持的编码一起使用,但没有一个解决了这个问题。 JSON 文件以正确的结构出现,只是编码有问题。

解决方法

来自@O.Jones 的评论和解决方案: 问题是该文件已经用拉丁语编码,但 axios 需要 utf-8 并相应地编码。 解决方案是添加

responseEncoding:"latin1"

我通过 axios 调用发送的选项。 这基本上告诉 axios 期望得到与默认 utf-8 不同编码的答案。

由于现在数据是以正确的编码读取的,因此在此之后无需进一步编码。