在Node.js应用程序中读取文件时出现奇怪的unicode字符

我正在尝试编写一个节点应用程序,该应用程序读取一组文件,将它们拆分为几行,然后将这些行放入数组中。很简单

除了我正在使用的某些SQL文件外,它还可以处理许多文件。由于某些原因,当我拆分行时,似乎会得到某种unicode输出。该应用程序看起来像这样:

fs = require("fs");

var data = fs.readFileSync("test.sql", "utf8");

console.log(data);

lines = data.split("\n");

console.log(lines);

输入文件如下所示:

use whatever

go

输出看起来像这样:

��use whatever

go

[ '��u\u0000s\u0000e\u0000 \u0000w\u0000h\u0000a\u0000t\u0000e\u0000v\u0000e\u0000r\u0000',

'\u0000g\u0000o\u0000',

'\u0000' ]

如您所见,文件开头有某种无法识别的字符。读入数据并直接输出后,除此字符外看起来还不错。但是,如果我随后尝试将其分成几行,则会得到所有这些类似于Unicode的字符。基本上是所有实际字符,每个字符的开头都带有“

\ u0000”。

我不知道这里发生了什么,但似乎与文件本身中的字符有关。如果我将文件的文本复制并粘贴到另一个新文件中,然后在新文件上运行该应用程序,则可以正常工作。我认为在复制和粘贴过程中会消除导致此问题的任何原因。

回答:

您的文件位于UTF-16小 字节序,而不是UTF-8。

var data = fs.readFileSync("test.sql", "utf16le"); //Not sure if this eats the BOM


不幸的是,node.js仅支持UTF-16 Little

Endian或UTF-16LE(无法确定是否阅读文档,它们之间存在细微差别;即UTF-16LE不使用BOM),因此您必须使用iconv或以其他方式将文件转换为UTF-8。

例:

var Iconv  = require('iconv').Iconv,

fs = require("fs");

var buffer = fs.readFileSync("test.sql"),

iconv = new Iconv( "UTF-16", "UTF-8");

var result = iconv.convert(buffer).toString("utf8");

以上是 在Node.js应用程序中读取文件时出现奇怪的unicode字符 的全部内容, 来源链接: utcz.com/qa/421092.html

回到顶部