Ich habe eine Sinatra-Anwendung ( Ссылка ), die Folgendes ausführt:
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?
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.