Node.js支持的编码列表

我需要读取ISO-8859-1(也称为latin1)编码的文件,如下所示:

var file_contents = fs.readFileSync("test_data.html", "latin1"); 

但是,Node抱怨“latin1”或“ISO-8859-1”不是有效的编码(“Error:Unknown encoding”)。

readFileSync接受哪些编码?

节点本身支持的编码列表相当短:

  • ASCII
  • BASE64
  • 二进制
  • hex
  • UCS2 / UCS2 / utf16le应按/ utf16le应按
  • UTF8 / UTF8
  • latin1(ISO8859-1, 只在节点6.4.0+中

如果您使用的是比6.4.0更早的版本,或者不想处理非Unicode编码,则可以重新编码string:

使用iconv-lite重新编码文件:

 var iconvlite = require('iconv-lite'); var fs = require('fs'); function readFileSync_encoding(filename, encoding) { var content = fs.readFileSync(filename); return iconvlite.decode(content, encoding); } 

或者,使用iconv :

 var Iconv = require('iconv').Iconv; var fs = require('fs'); function readFileSync_encoding(filename, encoding) { var content = fs.readFileSync(filename); var iconv = new Iconv(encoding, 'UTF-8'); var buffer = iconv.convert(content); return buffer.toString('utf8'); } 

如果上面的解决scheme不适合你,可以用下面的纯节点代码获得相同的结果。 上面的代码不适合我,并且在OSX上运行“npm install iconv”时导致编译exception:

 npm install iconv npm WARN package.json portalServer@0.1.0 No README.md file found! npm http GET https://registry.npmjs.org/iconv npm http 200 https://registry.npmjs.org/iconv npm http GET https://registry.npmjs.org/iconv/-/iconv-2.0.4.tgz npm http 200 https://registry.npmjs.org/iconv/-/iconv-2.0.4.tgz > iconv@2.0.4 install /Users/markboyd/git/portal/app/node_modules/iconv > node-gyp rebuild gyp http GET http://nodejs.org/dist/v0.10.1/node-v0.10.1.tar.gz gyp http 200 http://nodejs.org/dist/v0.10.1/node-v0.10.1.tar.gz xcode-select: Error: No Xcode is selected. Use xcode-select -switch <path-to-xcode>, or see the xcode-select manpage (man xcode-select) for further information. 

如果没有指定编码,fs.readFileSync()将返回一个Buffer。 而Buffer有一个toString()方法,如果没有指定编码给你的文件的内容将转换为UTF8。 请参阅nodejs文档。 这对我有效。