it-swarm.com.de

Wie konvertiert man einen String in UTF8 in Ruby

Ich schreibe einen Crawler, der Hpricot verwendet. Es lädt eine Liste von Strings von einer Webseite herunter, dann versuche ich es in die Datei zu schreiben. Irgendwas stimmt mit der Kodierung nicht:

"\xC3" from ASCII-8BIT to UTF-8

Ich habe Elemente, die auf einer Webseite gerendert und auf diese Weise gedruckt werden:

Développement

das str.encoding gibt UTF-8 zurück, also hilft force_encoding('UTF-8') nicht. Wie kann ich dies in lesbares UTF-8 konvertieren?

50
ciembor

Ihre Zeichenfolge scheint falsch herum codiert worden zu sein:

"Développement".encode("iso-8859-1").force_encoding("utf-8")
#=> "Développement"
57
Stefan

Scheint, als ob Ihre Zeichenfolge UTF-8 ist, aber in Wirklichkeit ist es etwas anderes, wahrscheinlich ISO-8859-1.

Definieren (erzwingen) Sie zuerst die richtige Codierung und konvertieren Sie sie dann in UTF-8.

In deinem Beispiel:

puts "Développement".encode('iso-8859-1').encode('utf-8')

Eine Alternative ist:

puts "\xC3".force_encoding('iso-8859-1').encode('utf-8') #-> Ã

Wenn der à macht keinen Sinn, dann versuche es mit einer anderen Kodierung.

47
knut

" Ruby 1.9: ungültige Bytefolge in UTF-8 " beschrieb einen weiteren guten Ansatz mit weniger Code:

file_contents.encode!('UTF-16', 'UTF-8')
4
kaleb4eg