此代码下载示例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' }))
但是使用request
和fs
模块,我无法将其保存为latin1
编码。我该如何修复此代码?
答案 0 :(得分:0)
Node v8.1.4应该支持latin1(又名' binary')作为Buffer的编码之一。我刚刚测试了你的代码,它实际上工作正常。我使用Atom作为我的文本编辑器,最初,它认为它是' UTF-8'所以出现了问号字符。当我从UTF-8切换到'自动检测'时,一切都显得正常。请参见下面的屏幕截图。
请注意它是如何说的“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'编码可能不正确 解码字符。