当前位置: 首页 > 面试题库 >

Windows上的utf8编码文件的node.js读取文件错误

夏立果
2023-03-14
问题内容

我正在尝试在Windows 8.1上使用node.js(0.10.29)从磁盘加载UTF8 json文件。以下是运行的代码:

var http = require('http');
var utils = require('util');
var path = require('path');
var fs = require('fs');

var myconfig;
fs.readFile('./myconfig.json', 'utf8', function (err, data) {
    if (err) {
        console.log("ERROR: Configuration load - " + err);
        throw err;
    } else {
        try {
            myconfig = JSON.parse(data);
            console.log("Configuration loaded successfully");
        }
        catch (ex) {
            console.log("ERROR: Configuration parse - " + err);
        }


    }
});

运行此命令时出现以下错误:

SyntaxError: Unexpected token ´╗┐
    at Object.parse (native)
    ...

现在,当我将文件编码(使用Notepad ++)更改为ANSI时,它可以正常工作。

任何想法为什么会这样?在Windows上进行开发的同时,最终解决方案将部署到各种非Windows服务器上,例如,如果将ANSI文件部署到Linux,我担心会在服务器端遇到问题。

根据我在此处以及通过Google进行的搜索,该代码应该可以在Windows上运行,因为我明确告诉它应该使用UTF-8文件。

我正在阅读的示例配置:

{
    "ListenIP4": "10.10.1.1",
    "ListenPort": 8080
}

问题答案:

每个“
fs.readFileSync(filename,’utf8’)不会剥离BOM标记#1918”
fs.readFile按设计工作:
如果存在 BOM,则 不会 从UTF-8文件的标题中剥离BOM 。由开发人员酌情处理。

可能的解决方法:

  • data = data.replace(/^\uFEFF/, '');每个https://github.com/joyent/node/issues/1918#issuecomment-2480359
  • bomstrip根据https://github.com/joyent/node/issues/1918#issuecomment-38491548,使用NPM模块转换传入流以删除BOM表头。

您得到的是UTF-8文件的字节顺序标记标头(BOM)。当JSON.parse看到这一点,它提供了一个语法错误(读:“意外字符”错误)。您必须先从文件中删除字节顺序标记,然后再将其传递给JSON.parse

fs.readFile('./myconfig.json', 'utf8', function (err, data) {
    myconfig = JSON.parse(data.toString('utf8').replace(/^\uFEFF/, ''));
});
// note: data is an instance of Buffer


 类似资料:
  • 问题内容: 我对在Node.js中读取文件感到很困惑。 文件与尝试打开并读取文件的文件位于同一目录中。 但是,在控制台中,我得到: {[错误:ENOENT,打开’./start.html’]错误号:34,代码:’ENOENT’,路径:’./ start.html’} 有任何想法吗? 问题答案: 使用; 多亏了dc5。

  • 我有字节数组,它放在InputStreamReader中,用它做一些操作。 JVM有默认的cp1252编码,但是我转换成字节数组的文件有utf-8编码。此外,这个文件有德语umlauts。当我把字节数组放在InputStreamReader中时,java会将元音解码为错误的符号。例如,ürepression为。我试着把“utf-8”和charset.forname(“utf-8”).newdeco

  • 问题内容: 我正在尝试使用Python(仅法语和/或西班牙语字符)读取带有重音字符的CSV文件。基于csvreader的Python 2.5文档(http://docs.python.org/library/csv.html),由于csvreader仅支持ASCII,因此我想出了以下代码来读取CSV文件。 以下是我尝试阅读的CSV文件的摘录: 即使我尝试将编码/解码为UTF-8,我仍然收到以下异常

  • 建议选择 safe 方式命名文件名。 经测试,以下修改源码以适应 utf-8 命名方式兼容性也不好。 // 修改\inc\pageutils.php中utf8_encodeFN、utf8_decodeFN两个函数   function utf8_encodeFN($file,$safe=true){ global $conf; //if($conf['fnencode'] == '

  • 问题内容: 我需要在终端中传递一个文本文件,然后从中读取数据,我该怎么办? 如何从终端进入路径,如何在另一侧阅读? 问题答案: 您将要使用数组访问命令行参数以获取文件名,并使用FileSystem模块(fs)来读取文件。例如: 为了稍微分解一下,通常长度为2,第零个为“节点”解释器,第一个为节点当前正在运行的脚本,其后的项目在命令行中传递。从argv中提取文件名后,就可以使用文件系统函数读取文件并

  • 任何指针都将有所帮助。 谢谢,阿希什