【问题标题】:Node.js generated csv file is displaying £ for a UK pound sign (£)Node.js 生成的 csv 文件显示 £ 表示英国英镑符号 (£)
【发布时间】:2017-12-27 04:46:14
【问题描述】:

我正在使用这个 json2scv 包解析我的数据(示例 json 数据在下面的代码中描述)

我正在尝试使用以下代码在我的 nodejs 应用程序中生成一个 CSV 文件:

如果我在 Excel 中打开文件,那么在应该出现 £ 符号的任何地方都会得到 £

var json2csv = require('json2csv');
var fs = require('fs');
var fields = ['car', 'price', 'color'];
var myCars = [
  {
    "car": "Audi",
    "price": "£40000",
    "color": "blue"
  }, {
    "car": "BMW",
    "price": "£35000",
    "color": "black"
  }, {
    "car": "Porsche",
    "price": "£60000",
    "color": "green"
  }
];
var csvStr = json2csv({ data: myCars, fields: fields, del: ',' });

fs.writeFile('file.csv', csvStr, { encoding: 'utf8' },function(err) {
  if (err) throw err;
  console.log('file saved');
});

有什么想法吗?

谢谢。

【问题讨论】:

  • 您遇到了文本编码问题。您正在保存 UTF-8,但在某些时候这被读取为 ISO-8859-1(或类似)。尝试在文件开头添加 BOM,保存在 8859-1 中,或者在加载时明确指定编码。
  • @Richard 添加 BOM "\ufeff" 并使用编码 "utf16le" 解决了这个问题。感谢您的反馈。

标签: javascript node.js file csv encoding


【解决方案1】:

我从这个答案中得到了解决方案,它是问题线程:https://stackoverflow.com/a/27975629/5228251

UTF-8 示例:

fs.writeFile(someFilename, '\ufeff' + html, { encoding: 'utf8' }, function(err) {
   /* The actual byte order mark written to the file is EF BB BF */
}

UTF-16 Little Endian 示例:

fs.writeFile(someFilename, '\ufeff' + html, { encoding: 'utf16le' }, function(err) {
   /* The actual byte order mark written to the file is FF FE */
}

在完成上述答案后,它是线程,然后我修改了我的代码:

  • 将分隔符选项更改为 "\t" 而不是 ","
  • "\ufeff" 添加到 csv 字符串中
  • 将编码更改为使用"utf16le" 而不是"utf8"

这是我更新的代码:

var json2csv = require('json2csv');
var fs = require('fs');
var fields = ['car', 'price', 'color'];
var myCars = [
  {
    "car": "Audi",
    "price": "£40000",
    "color": "blue"
  }, {
    "car": "BMW",
    "price": "£35000",
    "color": "black"
  }, {
    "car": "Porsche",
    "price": "£60000",
    "color": "green"
  }
];
var csvStr = json2csv({ data: myCars, fields: fields, del: '\t' });

fs.writeFile('file.csv', '\ufeff' + csvStr, { encoding: 'utf16le' },function(err) {
  if (err) throw err;
  console.log('file saved');
});

希望这对其他人有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 2011-02-26
  • 2011-04-12
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多