我正在尝试将文本从ANSI编码文件转换为node.js中的UTF8编码文本。
我正在使用node的核心Fyle系统从文件中读取信息。有没有办法“告诉”readFile编码是ANSI的?
fs = require('fs');
fs.readFile('..\\\\LogSSH\\' + fileName + '.log', 'utf8', function (err, data) {
if (err) {
console.log(err);
}如果不是,我如何转换该文本?
发布于 2016-12-13 23:52:11
当然,ANSI实际上不是一种编码。但是,无论我们讨论的是哪种确切的编码,我都看不到任何微软代码页包含在Buffers and Character Encodings文档中相对较短的列表中
ascii -仅用于7位ASCII码数据。这种编码速度很快,并且将剥离set.utf8多字节编码的Unicode字符的高位。许多网页和其他文档格式使用UTF-8.utf16le -2或4字节、低端编码的Unicode字符。代理项对(从supported.ucs2到U+10FFFF)是'utf16le'.base64 - Base64编码的别名。从字符串创建缓冲区时,此编码还将正确接受5.latin1节中指定的"URL和文件名安全字母表“-将缓冲区编码为单字节编码字符串的一种方式(如RFC1345第63页中的IANA定义的那样,为拉丁语补充块和C0/C1控制codes).binary - 'latin1'.hex的别名-将每个字节编码为两个十六进制字符。如果您在西欧工作,您可能会使用latin1作为Windows-1252的同义词,但是一旦您打印一个€符号,它就会呈现不正确的结果。
所以答案是否定的,你需要安装像iconv-lite这样的第三方软件包。
发布于 2016-12-14 16:50:51
在我的例子中,类型之间的转换是由于需要使用特殊的拉丁字符作为‘i’或'ó‘。我解决了在fs.readFile()函数中将编码从'utf8‘改为二进制的问题:
fs.readFile('..\\LogSSH\\' + fileName + '.log', {encoding: "binary"}, function (err, data) {
if (err) {
console.log(err);
}https://stackoverflow.com/questions/41124917
复制相似问题