如何在nodejs中读取一个utf-16编码的文件?

28

我需要使用Node.js读取一个UTF-16编码的文件(因为文件非常大,所以需要分块读取)。文件中的数据将会被存储到MongoDB中,因此我需要将其转换成UTF-8编码。通过搜索得知,Node.js本身并不支持这种转换,而我需要手动将原始数据从缓冲区转换。但是我认为应该有更好的方法,只是我没有找到。有什么建议吗?

谢谢。


2
它应该支持UCS2,这与UTF-16非常接近。 - Ryan Olds
2个回答

45

utf16le 或者 ucs2 替换掉读取文本文件所用的普通 utf8 编码:

var fileContents = fs.readFileSync('import.csv','utf16le')
或者:
var fileContents = fs.readFileSync('import.csv','ucs2')

另外,对于在互联网上搜索信息的任何人:如果在解析文件中出现了额外的“?”字符,则可能是您问题的原因。请将文件视为UTF16/UCS2格式,额外的字符将消失。


6
附注:'ucs2' 是 'utf16le' (小端) 的别名。如果在特定情况下使用'utf16le'会使意图更加清晰,您也可以使用它。 Buffer.prototype.toString() 也支持相同的编码参数。如果源是大端的,则需要使用 Buffer.prototype.swap16() 交换字节,因为Node.js目前没有'utf16be'编码。 - Ates Goral
谢谢@ates的建议,这是一个好建议,我已经更新了答案来包含它。 - mikemaccana

25

Node支持UCS-2,这是JavaScript支持的UTF-16子集。建议使用该子集。

请参考此拉请求


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接