2012-07-17 160 views
2

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

我试着读成:

  • 缓冲
  • 字符串

试图differente编码类型:

  • ASCII
  • 的base64
  • UTF8

http://nodejs.org/api/fs.html

如引用是有办法,使这项工作?

+0

这几乎肯定是您使用节点的fs模块的方式的问题。将文件读取为UTF-8(这是节点的默认值)应该可以读取扩展ASCII。请发布代码示例,我们可以帮助您进行调试。 – 2012-07-17 18:48:35

+0

我刚刚发现nodepad ++能够将从哪种格式转换为UTF-8格式。该文件在ANSI中,当我试图在utf-8中读取它时,它不会识别扩展的ascii字符。我只是先转换它,然后才能正确读取它! – 2012-07-17 19:19:22

+0

对不起,没有发布任何代码,但因为我觉得它似乎没有必要。谢谢Peter – 2012-07-17 19:22:35

回答

3

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

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); 
}); 

上述wierdness是因为我在emacs的缓冲器运行它。

+0

嗯,我不确定我能够对二进制数据执行字符串操作。我不知道是否有办法将它转换为String,但我已经找到了答案。 – 2012-07-17 19:23:34

+0

zz2中的'file'变量是字符串的一个实例。 – seth 2012-07-17 20:00:09

+1

“二进制”编码已弃用,应该使用原始的“缓冲区”。 – OrangeDog 2012-07-17 20:14:56

2

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

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

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

谢谢您的回答!

0

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

我写了一个模块,它提供了扩展ASCII解码和编码支持/从节点缓冲区。 You can see the source code here.这是我在浏览器中为我创建的名为BrowserFS的浏览器内文件系统实现的Buffer的一部分,但它可以独立于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许可的。

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