NodeJS扩展ASCII支持

3
我想读取一个包含扩展ASCII字符的文件,如'á'或'è',但NodeJS似乎无法识别它们。
我尝试使用以下方法进行读取:
- Buffer - String
并尝试了不同的编码类型:
- ascii - base64 - utf8
http://nodejs.org/api/fs.html所述。
有没有办法让这个工作?

这几乎肯定是您使用node的fs模块的方式有问题。以UTF-8(这是node的默认设置)读取文件应该可以很好地读取扩展ASCII字符。请发布代码示例,我们可以帮助您调试它。 - Peter Lyons
我刚刚发现nodepad ++能够将任何格式转换为UTF-8。该文件是ANSI格式的,当我尝试以utf-8格式读取它时,它无法识别扩展ASCII字符。我先将其转换,然后就能正确地读取它了! - F. Santiago
抱歉没有发布任何代码,但既然我已经解决了,似乎没必要了。谢谢Peter。 - F. Santiago
你可以将Seth的帖子标记为正确答案,因为他实际上解决了这个问题。 - tomdemuyt
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缓冲区中运行它。

嗯,我不确定能否对二进制数据执行字符串操作。我不知道是否有一种将其转换为字符串的方法,但我已经找到了答案。 - F. Santiago
zz2中的'file'变量是字符串实例。 - seth
1
“binary” 编码已被弃用,应使用原始的 “Buffer” 代替。 - OrangeDog

2
我试图读取的文件采用ANSI编码。当我尝试使用“fs”模块的函数进行阅读时,它无法转换扩展ASCII字符。
我刚刚发现nodepad ++实际上能够从某些格式转换为UTF-8,而不仅仅是将文件标记为UTF-8编码。
在转换后,我能够很好地读取它并对内容应用所有需要的操作。
感谢您的回答!

1
我知道这是一篇旧文章,但我在寻找解决此特定问题的方法时找到了它。
我编写了一个模块,为 Node Buffers 提供扩展 ASCII 解码和编码支持。 您可以在此处查看源代码。 它是我在浏览器中创建的名为 BrowserFS 的浏览器文件系统中实现缓冲区的一部分,但它可以完全独立于任何其他内容在 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");

如果您不想在项目中添加额外的依赖项,也可以将该模块调整到您的项目中。它是MIT许可。

我希望这篇文章能帮助到未来像我一样通过搜索找到这个页面的人们。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接