【问题标题】:Convert ANSI file text into UTF8 in node.js usinf Fyle System使用文件系统将 ANSI 文件文本转换为 node.js 中的 UTF8
【发布时间】:2016-12-13 15:35:36
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript node.js utf-8 fs


    【解决方案1】:

    当然,ANSI 实际上并不是一种编码。但无论我们谈论的是什么确切的编码,我都看不到任何 Microsoft 代码页包含在 Buffers and Character Encodings 记录的相对较短的列表中:

    • 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 编码为单字节编码字符串的方法(由 IANA 在 RFC1345 第 63 页中定义,作为 Latin-1 补充块和 C0/C1 控制代码) .

    • binary - 'latin1' 的别名。

    • hex - 将每个字节编码为两个十六进制字符。

    如果您在西欧工作,您可能很想将 latin1 用作 Windows-1252 的同义词,但只要您打印 符号,它就会呈现不正确的结果。

    所以答案是否定的,你需要安装像iconv-lite这样的第三方包。

    【讨论】:

    • @AsierPomposo 在没有 iconv-lite 的情况下你是如何解决的?
    • @DuncanLuk 。我解决了它在 fs.readFile() 中将编码从“utf8”更改为二进制。你有我上面使用的代码
    【解决方案2】:

    在我的例子中,类型之间的转换是由于需要使用特殊的拉丁字符作为“í”或“ó”。我解决了它在 fs.readFile() 函数中将编码从“utf8”更改为二进制:

     fs.readFile('..\\LogSSH\\' + fileName + '.log', {encoding: "binary"}, function (err, data) {
                if (err) {
                    console.log(err);
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      相关资源
      最近更新 更多