Javascript 从文件读取并写入文件'Ł';带nodejs的字符
我有一个带有“Ł”字符的ansi文件,我想读取此字符并将其保存到另一个具有相同编码的文件中(以获取“Ł”字符) 如何使用nodejs实现这一点 更新:我检查了输入文件: 文件-i 文本/纯字符集=uknown-8bit 文件-r 非ISO扩展ASCII,文本具有很长的行,带有CRLF行终止符Javascript 从文件读取并写入文件'Ł';带nodejs的字符,javascript,node.js,encoding,polish,Javascript,Node.js,Encoding,Polish,我有一个带有“Ł”字符的ansi文件,我想读取此字符并将其保存到另一个具有相同编码的文件中(以获取“Ł”字符) 如何使用nodejs实现这一点 更新:我检查了输入文件: 文件-i 文本/纯字符集=uknown-8bit 文件-r 非ISO扩展ASCII,文本具有很长的行,带有CRLF行终止符 我可以用这样的细节保存文件吗?这很可能是一个utf-8编码的文件,而不是一个“ansi”文件。“Ł”字符不能在编码上表示。在unix es上使用file命令检查它的编码类型,并从中继续操作。我通过使用有问题
我可以用这样的细节保存文件吗?这很可能是一个utf-8编码的文件,而不是一个“ansi”文件。“Ł”字符不能在编码上表示。在unix es上使用
file
命令检查它的编码类型,并从中继续操作。我通过使用有问题的字符从缓冲区中创建二进制字符串实现了我想要的:
const fs = require('fs');
function getChar(charId) {
let characters = { AA:165, //Ą
EE:202, //Ę
CC:198, //Ć
LL:163, //Ł
SS:140, //Ś
OO:211, //Ó
ZZ:175, //Ż
ZZZ:143, //Ź
aa:185, //ą
ee:234, //ę
cc:230, //ć
ll:179, //ł
ss:156, //ś
oo:243, //ó
zz:191, //ź
zzz:159 //ź
};
let buf = new Buffer({
type:'Buffer',
data:[ characters[charId] ],
encoding:'ISO-8859-2'
});
return buf.toString('binary')
}
fs.writeFileSync('output.txt',getChar('LL')+" test",'ascii'); //'Ł test'
定义“ansi文件”--文件使用什么特定编码?当我试图用下拉框中的“ANSI”选项从记事本保存文件时(我相信它使用的是Windows-1252),它无法正确保存,这让我怀疑它是否在该编码中有映射…我用记事本++打开文件,它说ANSI。该代码应该可以工作(不管编码如何)。当您不给
readFile
/readFileSync
编码时,它读取原始缓冲区(不转换数据)。当你给writeFile
/writeFileSync
一个缓冲区时,它不使用编码,它只写数据。^^^经过验证,它很高兴地逐位复制文件。是的,它确实有效,我只需要弄清楚如何将这个字符与字符串的其余部分连接起来,并正确地保存到文件中。现在,这是一条注释(一个有用的答案),不是答案。@T.J.Crowder是真的,但问题没有那么多内容。希望他们能更新问题,以便我可以扩展答案。我用file
命令检查文件后更新了问题。
const fs = require('fs');
function getChar(charId) {
let characters = { AA:165, //Ą
EE:202, //Ę
CC:198, //Ć
LL:163, //Ł
SS:140, //Ś
OO:211, //Ó
ZZ:175, //Ż
ZZZ:143, //Ź
aa:185, //ą
ee:234, //ę
cc:230, //ć
ll:179, //ł
ss:156, //ś
oo:243, //ó
zz:191, //ź
zzz:159 //ź
};
let buf = new Buffer({
type:'Buffer',
data:[ characters[charId] ],
encoding:'ISO-8859-2'
});
return buf.toString('binary')
}
fs.writeFileSync('output.txt',getChar('LL')+" test",'ascii'); //'Ł test'