如何使用latin1字符编码在NodeJS中保存文件?

时间:2017-01-24 16:26:17

标签: javascript node.js character-encoding httprequest

此代码下载示例latin1 / ISO-8859-1编码文件并将其保存到磁盘。打开该文件,你会看到奇怪的问号字符 。 https://stackoverflow.com/a/3527176/779159解释了这是因为应用了错误的编码,latin1应该修复它。

const url = 'http://vancouver-webpages.com/multilingual/french.asis'
request.get(url, { encoding: null })
  .pipe(fs.createWriteStream('/tmp/file.txt', { defaultEncoding: 'latin1' }))

但是使用requestfs模块,我无法将其保存为latin1编码。我该如何修复此代码?

1 个答案:

答案 0 :(得分:0)

Node v8.1.4应该支持latin1(又名' binary')作为Buffer的编码之一。我刚刚测试了你的代码,它实际上工作正常。我使用Atom作为我的文本编辑器,最初,它认为它是' UTF-8'所以出现了问号字符。当我从UTF-8切换到'自动检测'时,一切都显得正常。请参见下面的屏幕截图。

Windows 1252 Encoding on Atom

请注意它是如何说的“Windows 1252'对于编码,但如果我选择了ISO 8859-1'它的工作方式相同。因此,请确保您使用的任何编辑器都能正确检测到字符编码。这不是Node的错!

顺便说一句,根据docs for Node v8.1.4,在Buffer的其中一个部分中要注意一个有趣的事情:

  

今天的浏览器遵循WHATWG规范,该规范对“latin1”和“latin1”'   和ISO-8859-1到 win-1252 。这意味着在做类似的事情时   http.get(),如果返回的charset是其中列出的那个之一   WHATWG spec 服务器实际可能返回   win-1252编码数据,并使用' latin1'编码可能不正确   解码字符