2011-11-30 41 views
13

我使用:Module: Request -- Simplified HTTP request method刮网页重音字符á é ó ú ê ã模块请求如何正确检索重音字符?

我已经尝试过encoding: utf-8没有成功。结果中我仍然得到这个字符。

request.get({ 
    uri: url, 
    encoding: 'utf-8' 
    // ... 

是否有任何配置可以解决它?

我不知道这是否是一个问题,但我filled one for this module。还没有答案。 :/

+0

那么,写入的网页是什么编码? UTF8?异的东西吗? – thejh

+4

我在问题(https://github.com/mikeal/request/issues/118#issuecomment-2965894)中回答了你。我不知道为什么,但我使用'二进制'的编码,它的工作。 –

+3

同样对我来说,只要加上'encoding:binary'就能很好地工作 – renatoargh

回答

18

由于二进制已被弃用它似乎是一个好主意,用的iconv正确处理解码:

var request = require("request"), iconv = require('iconv-lite'); 
var requestOptions = { encoding: null, method: "GET", uri: "http://something.com"}; 

request(requestOptions, function(error, response, body) { 
    var utf8String = iconv.decode(new Buffer(body), "ISO-8859-1"); 
    console.log(utf8String); 
}); 

的重要组成部分,是设置在HTTP请求中编码为空encoding: null

+0

这很好,但我有两个问题。 1.为什么你需要为身体创造新的缓冲区?我试图直接使用身体,没有看到任何区别。我错过了什么? 2.如果网页上显示charset = utf-8,为什么我必须使用iconv-lite将其转换为ISO-8859-1? – newman

2

指定编码作为utf8utf-8。以下是从the Node.js documentation缓冲区的可能编码列表。

  • ascii - 仅适用于7位ASCII数据。这种编码方法非常快,并且如果设置则将剥去高位。
  • utf8 - Unicode字符。许多网页和其他文档格式使用UTF-8。
  • base64 - 的Base64编码字符串。
  • 'binary - 通过仅使用每个字符的前8位进行编码的原始二进制数据转换成字符串的方法。此编码方法已折旧,应尽可能避免使用缓冲对象。此编码将在未来版本的Node中删除。
+2

utf-8作为utf8工作。我废弃的页面是iso-8859-1。唯一对我有用的编码是“二进制”......太奇怪了......我们在这里讨论了它https://github.com/mikeal/request/issues/118 –

+2

二进制作品。感谢您的评论。 :) –

+0

二元作品适合我。我正在使用请求模块,我在选项中通过了encoding:'binary'。谢谢 –