Request: Zeichen mit Akzent?

Erstellt am 26. Nov. 2011  ·  17Kommentare  ·  Quelle: request/request

Hallo!

Ich versuche, eine Webseite mit akzentuierten Zeichen wie á é ó ú ê ã usw. zu verschrotten. Ich habe es mit encoding: utf-8 versucht, aber ich erhalte immer noch diese -Zeichen im Ergebnis.

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

Hilfreichster Kommentar

Anfrage({URL: " www.example.com ", Kodierung: "latin1" }, Funktion (Fehler, Antwort, HTML) {
console.log('Fehler:', Fehler);

Alle 17 Kommentare

Nun, welche Codierung verwendet die Seite? Sie können nicht einfach einen utf8-Parser auf ISO-was auch immer werfen.

@thejh die Seitencodierung ist iso-8859-1, ich habe es auch versucht:

request.get({
    uri: url,
    encoding: 'iso-8859-1'
    // ...

und ich habe:

Error: Unknown encoding

Aber ich lese diese Ausgabe https://github.com/mikeal/request/issues/27 dann http://nodejs.org/docs/v0.6.0/api/http.html#request.setEncoding

Set the encoding for the request body. Either 'utf8' or 'binary'. Defaults to null, which means that the 'data' event will emit a Buffer object..

Es funktionierte.

Schauen Sie sich die iconv-Bibliothek an.

Okay ... aber wissen Sie, warum Binärdateien funktioniert haben?

Weil es nur die rohen Pufferdaten nimmt. Außerdem ist die Zeichenfolge immer noch nicht utf8, also tun Sie es nicht.

Aber was ist in diesem Fall der richtige Wert für die Codierung?

Keine Codierung. Nehmen Sie es als Puffer und stopfen Sie es dann in iconv.

Die Verwirrung scheint über "binär" und Puffer zu liegen, der ebenfalls binär ist.

"Binär" ist meistens eine Legacy-Codierung aus dem Knoten 0.1.x Tage, wo wir alle Binärdateien in Zeichenfolgen codiert haben.

in node.js 0.2 haben wir ein Buffer-Objekt erhalten, das eine Rohzuordnung von Speicher außerhalb des Heaps von v8 ist. Das Objekt ist kein String und kann rohe Binärdaten enthalten, die Sie aus einem Dateideskriptor erhalten, und sie an einen anderen Dateideskriptor senden, ohne eine Konvertierung in einen String zu erleiden.

In request können Sie ein Anfrageobjekt an einen beliebigen Stream pipe() und alle Puffer werden an den Zielstream gesendet. Wenn Sie lediglich Binärdaten aus einer HTTP-Anforderung nehmen und an eine Datei, einen Socket oder eine HTTP-Antwort senden, sollten Sie einfach pipe() verwenden.

Wie kann ich Pipe mit dem Anforderungsmodul verwenden?

@mikeal Super !

Ich muss mehr als eine URL in derselben HTTP-Anfrage (es ist eine Webapp) verschrotten und dann alle diese Daten an die Antwort senden.

So kann ich es nicht versenden:

request.get({
        uri: url1
}).pipe(res);

request.get({
        uri: ur2
}).pipe(res);

Gibt es eine andere Möglichkeit, es stattdessen zu tun

var writeStream = fs.createWriteStream('./output');
request.get({
        uri: url1
}).pipe(writeStream);

request.get({
        uri: url2
}).pipe(writeStream);

// after all pipes finish I send writeStream content to the response

?

Welchen Stream kann ich mit Pipe verwenden?

Du kannst jeden Stream verwenden :)

HTTP-Server-Antworten können Sie es als Hauptteil eines anderen Anforderungsobjekts verwenden, Sie können einen Dateischreibstrom öffnen. irgendetwas :)

Anfrage({URL: " www.example.com ", Kodierung: "latin1" }, Funktion (Fehler, Antwort, HTML) {
console.log('Fehler:', Fehler);

@ Vickygill69 Danke, deine Antwort löst mein Problem

Das Setzen der Codierung auf null und die Verwendung des Antwortpuffers mit iconv hat bei mir funktioniert. Danke!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen