Node.js读取properties文件时Unicode字符多出反斜杠问题求解
问题原因
Node.js原生读取文件时,会把properties文件中作为普通文本存在的\字符自动转义为\\,因此你看到的\\u00c5本质是原文件的\u被转义后的结果,并不是真的多写入了反斜杠。properties文件的Unicode转义规则是该格式的专属规范,需要专门的解析逻辑才能正确转换为对应字符。
解决方案
方案1:使用第三方properties解析库(推荐)
直接用成熟的properties包处理,自动兼容properties的所有规范,包括Unicode转义、键值对拆分、注释处理等,无需自己处理边界问题:
- 安装依赖:
npm install properties
- 读取代码示例:
const properties = require('properties'); const fs = require('fs'); fs.readFile('./Language.properties', 'utf8', (err, data) => { if (err) throw err; // 解析配置,开启unicode转义 properties.parse(data, { unicode: true }, (err, result) => { if (err) throw err; // result就是解析完成的键值对对象 console.log(result.actions); console.log(result['add-attendee']); }); });
方案2:手动实现Unicode转义解析
如果不想引入第三方依赖,可以自己写正则替换逻辑处理转义:
const fs = require('fs'); // Unicode转义解析函数 function decodeUnicode(str) { return str.replace(/\\u([0-9a-fA-F]{4})/g, (match, code) => { return String.fromCharCode(parseInt(code, 16)); }); } fs.readFile('./Language.properties', { encoding: "utf-8" }, (err, data) => { if (!err) { // 先转义Unicode,再按行拆分处理键值对 const decodedData = decodeUnicode(data); const config = decodedData.split(/\r?\n/).reduce((obj, line) => { const [key, ...valueParts] = line.split('='); if (key && valueParts.length) { obj[key.trim()] = valueParts.join('=').trim(); } return obj; }, {}); console.log(config); } });
注意:你原来直接用
split("=")拆分整个文件的写法存在问题,如果配置值中本身包含等号,会被错误拆分。上面的手动处理代码已经优化为按行拆分,避免该问题。
内容的提问来源于stack exchange,提问作者Pascal Sys
相关产品推荐
相关产品推荐

