javascript - Node.js 生成的 csv 文件显示英镑符号 (£)

标签 javascript node.js file csv encoding

我正在使用这个 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');
});

有什么想法吗?

谢谢。

最佳答案

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

UTF-8 Example:

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 Example:

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');
});

希望这对其他人有帮助。

关于javascript - Node.js 生成的 csv 文件显示英镑符号 (£),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45232464/

相关文章:

javascript - 为什么同源策略限制访问 Ajax 而不是 Php?

javascript - 我的背景图片不会显示在 div 上

c++ - 在 C++ 中使用 libcurl 下载多个文件

c# - 使用 DMA 进行文件内数据复制

linux - 如何递归更改文件名的大小写?

javascript - 如何对用Javascript动态添加的元素求和?

javascript - 替换 Javascript 中的多个依赖嵌套异步调用 (ECMA 6)

javascript - Express.js 静态服务不工作

node.js - NodeJS 与 Arduino 的串口

javascript - 基于 brunch 构建的应用程序使用 app.css/app.js/... 文件的硬编码路径