我需要读取一个用ISO-8859-1(也称为latin1)编码的文件,如下所示:
var file_contents = fs.readFileSync("test_data.html", "latin1");
Run Code Online (Sandbox Code Playgroud)
但是,Node抱怨"latin1"或"ISO-8859-1"不是有效编码("错误:未知编码").
编码readFileSync接受的是什么?
phi*_*hag 196
该编码的列表节点本身支持是相当短的:
如果您使用的是旧版本而不是6.4.0,或者不想处理非Unicode编码,则可以重新编码该字符串:
使用iconv-lite重新编码文件:
var iconvlite = require('iconv-lite');
var fs = require('fs');
function readFileSync_encoding(filename, encoding) {
var content = fs.readFileSync(filename);
return iconvlite.decode(content, encoding);
}
Run Code Online (Sandbox Code Playgroud)
或者,使用iconv:
var Iconv = require('iconv').Iconv;
var fs = require('fs');
function readFileSync_encoding(filename, encoding) {
var content = fs.readFileSync(filename);
var iconv = new Iconv(encoding, 'UTF-8');
var buffer = iconv.convert(content);
return buffer.toString('utf8');
}
Run Code Online (Sandbox Code Playgroud)
Kyl*_*Mit 19
缓冲区文档中详细说明了编码。
字符编码
utf8:多字节编码的 Unicode 字符。许多网页和其他文档格式都使用 UTF-8。这是默认的字符编码。utf16le:多字节编码的 Unicode 字符。与 不同utf8,字符串中的每个字符将使用 2 或 4 个字节进行编码。latin1:Latin-1 代表 ISO-8859-1。U+0000此字符编码仅支持从到 的Unicode 字符U+00FF。二进制到文本编码
base64:Base64编码。当从字符串创建缓冲区时,此编码还将正确接受 RFC 4648 第 5 节中指定的“URL 和文件名安全字母表”。base64url(Node v14+):RFC 4648 第 5 节中指定的 base64url 编码。从字符串创建缓冲区时,此编码也将正确接受常规的 base64 编码字符串。将 Buffer 编码为字符串时,此编码将省略填充。hex:将每个字节编码为两个十六进制字符。遗留字符编码
ascii:仅适用于 7 位 ASCII 数据。一般来说,没有理由使用此编码,因为在编码或解码纯 ASCII 文本时,“utf8”(或者,如果已知数据始终仅是 ASCII,则“latin1”)将是更好的选择。binary:“latin1”的别名。ucs2:“utf16le”的别名。
| 归档时间: |
|
| 查看次数: |
109377 次 |
| 最近记录: |