我正在尝试读取包含扩展 ascii 字符(如“á”或“è”)的文件,但 NodeJS 似乎无法识别它们。
我尝试阅读:
- 缓冲
- 细绳
尝试不同的编码类型:
- ASCII
- base64
- utf8
如http://nodejs.org/api/fs.html中所引用
有没有办法使这项工作?
我正在尝试读取包含扩展 ascii 字符(如“á”或“è”)的文件,但 NodeJS 似乎无法识别它们。
我尝试阅读:
尝试不同的编码类型:
如http://nodejs.org/api/fs.html中所引用
有没有办法使这项工作?
我使用二进制类型来读取此类文件。例如
var fs = require('fs');
// this comment has I'm trying to read a file that contains extended ascii characters like 'á' or 'è',
fs.readFile("foo.js", "binary", function zz2(err, file) {
console.log(file);
});
当我将以上内容保存到 foo.js 中时,输出中会显示以下内容:
var fs = require('fs');
// this comment has I'm trying to read a file that contains extended ascii characters like '⟡ 漀爀 ✀',
fs.readFile("foo.js", "binary", function zz2(err, file) {
console.log(file);
});
上面的怪异是因为我在 emacs 缓冲区中运行它。
我试图读取的文件是 ANSI 编码的。当我尝试使用“fs”模块的函数读取它时,它无法执行扩展 ASCII 字符的转换。
我刚刚发现 nodepad++ 实际上能够从某些格式转换为 UTF-8,而不仅仅是使用 UTF-8 编码标记文件。
转换后,我能够很好地阅读它并将我需要的所有操作应用于内容。
谢谢您的回答!
我意识到这是一篇旧帖子,但我在个人寻找解决这个特定问题的方法时发现了它。
我编写了一个模块,为节点缓冲区提供扩展的 ASCII 解码和编码支持。您可以在此处查看源代码。它是我在浏览器中为浏览器内文件系统创建的称为 BrowserFS 的 Buffer 实现的一部分,但它可以 100% 独立于 NodeJS(或 Browserify)中的任何内容使用,因为它没有依赖关系。
只需添加bfs-buffer
到您的依赖项并执行以下操作:
var ExtendedASCII = require('bfs-buffer/js/extended_ascii').default;
// Decodes the input buffer as an extended ASCII string.
ExtendedASCII.byte2str(aBufferWithText);
// Encodes the input string as an extended ASCII string.
ExtendedASCII.str2byte("Some text");
或者,如果您不想为项目添加额外的依赖项,只需将模块调整到您的项目中即可。它是麻省理工学院许可的。
我希望这可以帮助将来像我一样在搜索中找到此页面的任何人。:)