我正在尝试将文本从ANSI编码文件转换为node.js中的UTF8编码文本。
我正在使用节点的核心Fyle系统从文件中读取信息。有没有办法“告诉”readFile编码是ANSI?
fs = require('fs');
fs.readFile('..\\\\LogSSH\\' + fileName + '.log', 'utf8', function (err, data) {
if (err) {
console.log(err);
}
如果没有,我该如何转换该文字?
答案 0 :(得分:3)
当然,ANSI实际上并不是一种编码。但无论我们谈论的编码是什么,我都看不到Buffers and Character Encodings中记录的相对较短的列表中包含的任何Microsoft代码页:
ascii
- 仅适用于7位ASCII数据。此编码速度很快,如果设置,将剥离高位。
utf8
- 多字节编码的Unicode字符。许多网页和其他文档格式使用UTF-8。
utf16le
- 2或4个字节,little-endian编码的Unicode字符。支持代理对(U + 10000到U + 10FFFF)。
ucs2
- 'utf16le'的别名。
base64
- Base64编码。从字符串创建缓冲区时,此编码也将正确接受RFC4648第5节中指定的“URL和文件名安全字母”。
latin1
- 一种将Buffer编码为单字节编码字符串的方法(由RFC1345中的IANA定义,第63页,作为Latin-1补充块和C0 / C1控制码)。
binary
- 'latin1'的别名。
hex
- 将每个字节编码为两个十六进制字符。
如果您在西欧工作,您可能会尝试使用latin1
作为Windows-1252的同义词,但只要您打印€
符号就会显示错误的结果。
答案是否定的,您需要安装第三方软件包,例如iconv-lite。
答案 1 :(得分:0)
在我的情况下,类型之间的转换是由于需要使用特殊的拉丁字符作为'í'或'ó'。我解决了它在fs.readFile()函数中将编码从'utf8'更改为二进制:
fs.readFile('..\\LogSSH\\' + fileName + '.log', {encoding: "binary"}, function (err, data) {
if (err) {
console.log(err);
}