2011-11-30 28 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'。謝謝 –

相關問題