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



所以我正在解析一个大型csv文件并将结果推入mongo。

文件是maxminds城市数据库。它有各种有趣的utf8字符。我仍然能在一些城市的名字中看到符号。下面是我读取文件的方式:

(使用CSV节点模块)

csv().from.stream(fs.createReadStream(path.join(__dirname, 'datafiles', 'cities.csv'), {
    flags: 'r',
    encoding: 'utf8'
})).on('record', function(row,index){
.. uninteresting code to add it to mongodb
});

我在这里做错了什么?我在加拿大的mongo: Ch - teaugay收到了这样的东西

编辑:

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

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年,"啪","03","Capellan�",",8.3000、-80.5500,154220,"基于"增大化现实"技术"、"01","别墅载荷适配器�",",-34.7667,-58.2000,,

原来maxmind用latin1编码。

如此:

  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

相关内容

  • 没有找到相关文章

最新更新