Dom*_*nik 19 file-io json node.js
我正在尝试在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);
}
}
});
Run Code Online (Sandbox Code Playgroud)
运行时出现以下错误:
SyntaxError: Unexpected token ´??
at Object.parse (native)
...
Run Code Online (Sandbox Code Playgroud)
现在,当我将文件编码(使用Notepad ++)更改为ANSI时,它可以正常工作.
任何想法为什么会这样?虽然在Windows上进行开发,但最终解决方案将部署到各种非Windows服务器上,我担心如果我将ANSI文件部署到Linux,我将在服务器端遇到问题.
根据我在这里和谷歌的搜索,代码应该适用于Windows,因为我特别告诉它期望一个UTF-8文件.
示例配置我正在阅读:
{
"ListenIP4": "10.10.1.1",
"ListenPort": 8080
}
Run Code Online (Sandbox Code Playgroud)
zam*_*uts 35
每个"fs.readFileSync(文件名,'utf8')不剥离BOM标记#1918",fs.readFile按设计工作:如果存在,则不会从UTF-8文件的标题中删除BOM .它由开发人员自行决定处理.
可能的解决方法:
data = data.replace(/^\uFEFF/, '');按https://github.com/joyent/node/issues/1918#issuecomment-2480359bomstrip根据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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15532 次 |
| 最近记录: |