使用Fyle System将ANSI文件文本转换为node.js中的UTF8

时间:2016-12-13 15:35:36

标签: javascript node.js utf-8 fs

我正在尝试将文本从ANSI编码文件转换为node.js中的UTF8编码文本。

我正在使用节点的核心Fyle系统从文件中读取信息。有没有办法“告诉”readFile编码是ANSI?

fs = require('fs');
        fs.readFile('..\\\\LogSSH\\' + fileName + '.log', 'utf8', function (err, data) {
            if (err) {
                console.log(err);
            }

如果没有,我该如何转换该文字?

2 个答案:

答案 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);
            }