文件:
聵
脚本:
require("fs").readFile ("file", "ascii", function (e, d){
console.log(d==="聵") //true
})
这怎么可能呢?
聵
不是ASCII字符,它使用三个字节编码,即0xE881B5。根据预期,我应该得到è\u0081µ
,因为ASCII字符只使用一个字节进行编码。如果我使用“binary”编码读取,则输出true,而如果使用ASCII编码,就会得到我的预期结果……require("fs").readFile ("file", "binary", function (e, d){
console.log(d === "è\u0081µ") //true
})
这个结果是有意的吗?如果ASCII编码返回与UTF8编码相同的结果,那么为什么“ascii”是可能的参数?
编辑:
这是内容(使用HxD程序打开):
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 E8 81 B5 è.µ
并且:
require("fs").readFile ("file", function (e, d){
console.log (d.toString ("ascii") === "聵") //true
console.log (d.toString ("utf8") === "聵") //true
console.log (d.toString ("binary") === "è\u0081µ") //true
console.log (d) //<Buffer e8 81 b5>
})
问题已提交给开发人员:https://github.com/joyent/node/issues/4413