3

我正在尝试读取包含扩展 ascii 字符(如“á”或“è”)的文件,但 NodeJS 似乎无法识别它们。

我尝试阅读:

  • 缓冲
  • 细绳

尝试不同的编码类型:

  • ASCII
  • base64
  • utf8

如http://nodejs.org/api/fs.html中所引用

有没有办法使这项工作?

4

3 回答 3

4

我使用二进制类型来读取此类文件。例如

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 缓冲区中运行它。

于 2012-07-17T18:52:16.263 回答
2

我试图读取的文件是 ANSI 编码的。当我尝试使用“fs”模块的函数读取它时,它无法执行扩展 ASCII 字符的转换。

我刚刚发现 nodepad++ 实际上能够从某些格式转换为 UTF-8,而不仅仅是使用 UTF-8 编码标记文件。

转换后,我能够很好地阅读它并将我需要的所有操作应用于内容。

谢谢您的回答!

于 2012-07-17T19:21:50.787 回答
0

我意识到这是一篇旧帖子,但我在个人寻找解决这个特定问题的方法时发现了它。

我编写了一个模块,为节点缓冲区提供扩展的 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");

或者,如果您不想为项目添加额外的依赖项,只需将模块调整到您的项目中即可。它是麻省理工学院许可的。

我希望这可以帮助将来像我一样在搜索中找到此页面的任何人。:)

于 2015-11-10T19:31:27.867 回答