使用fast-csv模块转换文件utf8

时间:2015-10-19 10:10:24

标签: javascript node.js unicode

我有一个名为“file.csv”的文件,此文件包含以下数据:

ID          Full name
1           Steve
2           John
3           nam
4           Hạnh
5           Thủy

我使用下面的段代码将此文件解析为json文件。但我的结果不是utf8

代码:

var fastCsv         = require("fast-csv");
var fs              = require("fs");
var iconv           = require('iconv-lite');
var fileStream      = fs.createReadStream("file.csv");

fastCsv
    .fromStream(fileStream, {headers : ["id", "full_name"]})
    .on("data", function(data){
        console.log("------------------------");
        console.log("data: ", data);
    })
    .on("end", function(){
        console.log("done");
});

结果:

data:  { id: '��I\u0000D\u0000', full_name: '\u0000F\u0000u\u0000l\u0000l\u0000 \u0000n\u0000a\u0000m\u0000e\u0000' }

data:  { id: '\u00001\u0000',full_name: '\u0000S\u0000t\u0000e\u0000v\u0000e\u0000' }

data:  { id: '\u00002\u0000',full_name: '\u0000J\u0000o\u0000h\u0000n\u0000' }

data:  { id: '\u00003\u0000',full_name: '\u0000n\u0000a\u0000m\u0000' }

data:  { id: '\u00004\u0000', full_name: '\u0000H\u0000�\u001en\u0000h\u0000' }

data:  { id: '\u00005\u0000',full_name: '\u0000T\u0000h\u0000�\u001ey\u0000' }

data:  { id: '\u0000', full_name: '' }

如何将我的结果转换为utf8?

2 个答案:

答案 0 :(得分:1)

您的输入文件以UTF-16LE编码,但它已被读取为好像是UTF-8。

尝试使用fs.createReadStream('file.csv', {encoding: 'utf-16le'})打开文件。

答案 1 :(得分:0)

查看Javascript Has a Unicode Problem

在您的情况下,您需要解码转义的unicode字符。名为punycode的节点附带的库可以处理这个问题。

通过以下方式导入punycode:

var punycode = require("punycode");

变化:

console.log("firstName: ", data);

要:

console.log("firstName: ", punycode.ucs2.decode(data));

您可能需要进一步细分data对象以解码其属性,但我无法从您的回答中了解其结构。