Node.js 从nodejs中包含重音字符的文件读取

Node.js 从nodejs中包含重音字符的文件读取,node.js,utf-8,maxmind,Node.js,Utf 8,Maxmind,因此,我正在解析一个大型csv文件,并将结果推送到mongo中 这个文件是。它有各种有趣的utf8字符。我仍然在一些城市名称中得到(?)符号。以下是我读取文件的方式: (使用csv节点模块) 我在这里做错了什么? 我在mongo得到了这样的东西:Ch�加拿大图圭 编辑: 我尝试使用不同的库来读取文件: lazy(fs.createReadStream(path.join(__dirname, 'datafiles', 'cities.csv'), { flags: 'r', en

因此,我正在解析一个大型csv文件,并将结果推送到mongo中

这个文件是。它有各种有趣的utf8字符。我仍然在一些城市名称中得到(?)符号。以下是我读取文件的方式:

(使用csv节点模块)

我在这里做错了什么? 我在mongo得到了这样的东西:Ch�加拿大图圭

编辑

我尝试使用不同的库来读取文件:

lazy(fs.createReadStream(path.join(__dirname, 'datafiles', 'cities.csv'), {
    flags: 'r',
    encoding: 'utf8',
    autoClose: true
  }))
    .lines
    .map(String)
    .skip(1) // skips the two lines that are iptables header
    .map(function (line) {
      console.log(line);
    });
它会产生同样的坏结果: 154252,“PA”,“03”,“卡佩兰”�a“,”,8.3000,-80.5500,,
154220,“AR”,“01”,“埃斯帕别墅”�一个“,”,-34.7667,-58.2000,,

证明maxmind用拉丁文1编码他们的东西

这项工作:

  var iconv  = require('iconv-lite')
  lazy(fs.createReadStream(path.join(__dirname, 'datafiles', 'cities.csv')))
    .lines
    .map(function(byteArray) {
      return iconv.decode(byteArray, 'latin1');
    })
    .skip(1) // skips the two lines that are iptables header
    .map(function (line) {
   //WORKS

如果您只是使用
utf-8
fs.createReadStream
读取文件,它是否已损坏?csv模块会弄坏它吗?好问题。我去看看
  var iconv  = require('iconv-lite')
  lazy(fs.createReadStream(path.join(__dirname, 'datafiles', 'cities.csv')))
    .lines
    .map(function(byteArray) {
      return iconv.decode(byteArray, 'latin1');
    })
    .skip(1) // skips the two lines that are iptables header
    .map(function (line) {
   //WORKS