2011-11-30 20 views
13

Używam: Module: Request -- Simplified HTTP request method do skrobania strony internetowej ze znaków akcentowanych á é ó ú ê ã itpModuł pyta, jak poprawnie pobrać znaki akcentowane?

Ja już próbowałem encoding: utf-8 bez powodzenia. Wciąż otrzymuję te znaków w wyniku.

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

Czy istnieje konfiguracja, aby to naprawić?

Nie wiem, czy to jest problem, ale I filled one for this module. Brak odpowiedzi. :/

+0

Cóż, jakie jest kodowanie strony internetowej? utf8? iso-coś? – thejh

+4

Odpowiedziałem Ci w sprawie (https://github.com/mikeal/request/issues/118#issuecomment-2965894). Nie wiem dlaczego, ale użyłem kodu binarnego do kodowania i zadziałało. –

+3

Również dla mnie, dodanie "kodowania: binarnego" działało świetnie – renatoargh

Odpowiedz

18

Od binarny jest przestarzała wydaje się lepszym pomysłem jest użycie iconv i poprawnie obsługiwać dekodowanie:

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

Ważną częścią jest, aby ustawić kodowanie na żądanie HTTP, aby być null encoding: null.

+0

Działa to świetnie, ale mam dwa pytania. 1. dlaczego potrzebujesz stworzyć nowy bufor dla ciała? Próbowałem użyć ciała bezpośrednio i nie widziałem żadnej różnicy. Czego mi brakuje? 2. Jeśli na stronie znajduje się charset = utf-8, dlaczego muszę użyć iconv-lite, aby przekonwertować go na ISO-8859-1? – newman

2

Określ kodowanie jako utf8, a nie utf-8. Oto lista możliwych kodowań bufora od the Node.js documentation.

  • ascii - tylko dla 7-bitowych danych ASCII. Ta metoda kodowania jest bardzo szybka i usunie wysoki bit, jeśli jest ustawiony.
  • utf8 - Znaki Unicode. Wiele stron internetowych i innych formatów dokumentów używa UTF-8.
  • base64 - Kodowanie ciągiem Base64.
  • 'binary - Sposób kodowania nieprzetworzonych danych binarnych na łańcuchy za pomocą tylko pierwszych 8 bitów każdego znaku. Ta metoda kodowania jest amortyzowana i należy jej unikać, jeśli to możliwe, na rzecz obiektów buforowych. To kodowanie zostanie usunięte w przyszłych wersjach Węzła.
+2

utf-8 działa jak utf8. Strona, którą złomuję to iso-8859-1. Jedyne kodowanie, które zadziałało, było "binarne" ... zbyt dziwne ... Dyskutowaliśmy o tym tutaj https://github.com/mikeal/request/issues/118 –

+2

Prace binarne. Dziękuję za komentarz. :) –

+0

binarny działa dla mnie. Korzystam z modułu żądania, przekazałem kodowanie: "binarny" w opcjach. Dziękuję –