fs.writeFileSync不在UTF-8中写入文件

时间:2020-04-22 09:04:36

标签: javascript node.js encoding fs

我正在尝试编写使用JavaScript以UTF-8编码的文本文件。
我必须通过命令行编写此文本文件,所以我的代码如下所示……

我的script.js:

const text = 'this is test text';
const fs = require('fs);
fs.writeFileSync('./test.txt', text, "utf8");

我的package.json:

{
  "name": "test-project",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@babel/cli": "^7.8.4",
    "@babel/core": "^7.9.0",
    "@babel/plugin-transform-runtime": "^7.9.0",
    "@babel/preset-env": "^7.9.5",
    "@babel/preset-react": "^7.9.4",
    "@babel/register": "^7.9.0",
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.3.2",
    "@testing-library/user-event": "^7.1.2",
    "axios": "^0.19.2",
    "bootstrap": "^4.4.1",
    "glob": "^7.1.6",
    "jquery": "^3.4.1",
    "react": "^16.12.0",
    "react-bootstrap": "^1.0.0-beta.17",
    "react-dom": "^16.12.0",
    "react-helmet": "^5.2.1",
    "react-router-dom": "^5.1.2",
    "react-router-sitemap": "^1.2.0",
    "react-scripts": "3.4.0",
    "react-table": "^7.0.0-rc.16",
    "recharts": "^2.0.0-beta.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "sitemap": "node src/sitemap.js"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

,然后在终端中运行以下命令:

$ node script.js
$ file --mime test.txt
$ test.txt: text/plain; charset=us-ascii

问题: 由fs.writeFileSync创建的文件以us-ascii而非utf-8编码。 如何在UTF-8中写入文件?
*注意:我使用的是日文PC,所以它可能会影响文件的编码?
*注2:我在下面尝试过,结果是相同的...

const stream = fs.createWriteStream('.test.txt', "utf8");
stream.once('open', () => {
    stream.write('this is test text');
});

1 个答案:

答案 0 :(得分:1)

fs.writeFileSync不在UTF-8中写入文件

实际上是的。 US-ASCII是字符代码为127及以下的字符的UTF-8的子集。因此,它既是US-ASCII,又是UTF-8。

对于127以下的纯ascii字符,UTF-8和US-ASCII之间没有物理差异。 US-ASCII字符使用UTF-8进行编码。

您正在编写的文件通常不会记录它是什么字符集。阅读软件可以根据找到的数据推断编码,也可以使用其他线索(例如文件扩展名)进行猜测。因此,您的程序只是告诉您文件符合US-ASCII的所有要求,因此看起来像是US-ASCII,它恰好是UTF-8的子集。

在其中放置一些日语字符,由于它们不适合US-ASCII,因此外观会有所不同。他们将使用多个字节来正确编码。

相关问题