Um eine Zeichenfolge in UTF-8 zu konvertieren und alle Codierungsfehler zu ersetzen, können Sie Folgendes tun:
%Vor% Das einzige Problem dabei ist, dass es nicht funktioniert, wenn str
bereits UTF-8 ist. In diesem Fall bleiben Fehler übrig:
Um die Ruby Docs zu zitieren:
Bitte beachten Sie, dass die Konvertierung von einer Kodierung
enc
in die gleiche Kodierungenc
ein No-Op ist, dh der Empfänger wird ohne Änderungen zurückgegeben, und es werden keine Ausnahmen ausgelöst, auch wenn ungültige Bytes vorhanden sind.
Die offensichtliche Problemumgehung besteht darin, zuerst in eine andere Unicode-Codierung und dann zurück in UTF-8 zu konvertieren:
%Vor%Zum Beispiel:
%Vor%Gibt es einen besseren Weg, dies zu tun, ohne in eine Dummy-Codierung zu konvertieren?
Ruby 2.1 hat eine String#scrub
-Methode hinzugefügt, die das macht, was Sie wollen:
Das gleiche Commit ändert auch das Verhalten von encode
, so dass es funktioniert, wenn die Quellen- und die Zielcodierung identisch sind:
Soweit ich weiß, gibt es keine Möglichkeit, dies vor 2.1 zu tun (sonst wäre scrub
nicht nötig), also müssen Sie eine Umgehungsmethode verwenden, bis 2.1 veröffentlicht ist und Sie ein Upgrade durchführen können.