2015-10-19 29 views
1

我有一個名爲「FILE.CSV」文件,該文件下面有數據:轉換文件UTF8與快速的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轉換?

+0

一個小建議。將輸出作爲文本發佈,而不是圖像,以便其他人可以使用它來測試。 –

+0

好的。謝謝你:) – DinhNC

回答

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對象進一步進行解碼的屬性,但我可以從你的回答中不能看出他們的結構是什麼。

+0

我認爲也許punycode也是解決方案。但我不明白它是做什麼的。:) – DinhNC

0

您的輸入文件使用UTF-16LE進行編碼,但是它被認爲是UTF-8。

試着用fs.createReadStream('file.csv', {encoding: 'utf-16le'})打開文件。

+0

是的,你說得對。我注意到我的錯誤是終端的顯示。 – DinhNC