So ändern Sie veraltet iconv zu String#encode ungültige UTF-8-Korrektur

Bekomme ich Quellen aus dem web, und manchmal ist die Kodierung des Materials ist nicht zu 100% UTF8-byte-Sequenz gültig. Ich benutze iconv stillschweigend zu ignorieren, diese Sequenzen zu erhalten, die gereinigte Zeichenfolge.

@iconv = Iconv.new('UTF-8//IGNORE', 'UTF-8')
valid_string = @iconv.iconv(untrusted_string)

Aber nun der iconv verworfen wurde, sehe ich die deprecation Warnung viel.

"iconv" wird als veraltet in die Zukunft, verwenden Sie String#encode

Ich habe versucht, die Konvertierung mit String#encode's :invalid und :replace Optionen, aber es scheint nicht zu funktionieren (d.h. die falsche byte-Reihenfolge wurde nicht entfernt). Was ist der richtige Weg, um die Verwendung von String#encode für diese?

  • Ich denke, was Sie versuchen, ist sehr gefährlich. Text-Kodierung ist wie Schwangerschaft: Sie haben entweder UTF8 oder nicht. Sie können nicht einfach ein "bit" in UTF8. Wenn es ein Fehler ist, Sie haben, um abzubrechen. Ansonsten ist Ihre Software ist möglicherweise anfällig für Angriffe mit böser Absicht vorbereitet strings.
  • Ich Schreibe ein crawler, und es wird eine Seite dort, die ein bisschen ungültig. So die Reinigung der bytes ist alles, was ich tun kann.
InformationsquelleAutor lulalala | 2012-02-03
Schreibe einen Kommentar