Wie konvertiert man eine Net :: HTTP Antwort auf eine bestimmte Kodierung in Ruby 1.9.1?

8

Ich habe eine Sinatra-Anwendung ( Ссылка ), die Folgendes ausführt:

  1. Abrufen einer HTML-Seite (via net / http)
  2. Erstellen Sie ein Nokogiri-Dokument aus dem response.body
  3. Extrahieren Sie einige Informationen und senden Sie sie in der Antwort zurück. Die Antwort sollte UTF-8-codiert sein

So kam ich auf das Problem beim Lesen von Seiten, die Windows-1256-Kodierungen wie www.filfan.com oder www.masrawy.com verwenden.

Das Problem ist das Ergebnis der Kodierungskonvertierung ist nicht korrekt, obwohl keine Fehler geworfen werden.

Die net / http response.body.encoding gibt ASCII-8BIT, das nicht in UTF-8 konvertiert werden kann

Wenn ich Nokogiri :: HTML (response.body) mache und die css-Selektoren verwende, um bestimmte Inhalte von der Seite zu erhalten - sagen wir zum Beispiel den Inhalt des title-Tags - bekomme ich eine Zeichenfolge, die beim Aufruf von string.encoding zurückkehrt WINDOWS-1256. Ich benutze string.encode ("utf-8") und sende die Antwort mit dieser, aber die Antwort ist nicht korrekt.

Irgendwelche Vorschläge oder Ideen über das, was in meinem Ansatz falsch ist?

    
humanzz 30.07.2009, 15:23
quelle

2 Antworten

21

Weil Net :: HTTP die Codierung nicht richtig behandelt. Siehe Ссылка

Sie können response['content-type'] , das charset enthält, parsen, anstatt ganze response.body zu analysieren.

Verwenden Sie dann force_encoding() , um die richtige Codierung festzulegen.

response.body.force_encoding("UTF-8") , wenn die Site in UTF-8 bereitgestellt wird.

    
A.D. 08.12.2012 17:03
quelle
3

Ich habe den folgenden Code gefunden, der jetzt für mich funktioniert

%Vor%     
humanzz 02.08.2009 00:43
quelle

Tags und Links