Wie kann ich UTF-8-Fehler in Ruby ersetzen, ohne in eine andere Kodierung zu konvertieren?

8

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:

%Vor%

Um die Ruby Docs zu zitieren:

  

Bitte beachten Sie, dass die Konvertierung von einer Kodierung enc in die gleiche Kodierung enc 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?

    
Matt 03.10.2013, 16:21
quelle

2 Antworten

11

Ruby 2.1 hat eine String#scrub -Methode hinzugefügt, die das macht, was Sie wollen:

%Vor%

Das gleiche Commit ändert auch das Verhalten von encode , so dass es funktioniert, wenn die Quellen- und die Zielcodierung identisch sind:

%Vor%

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.

    
matt 03.10.2013, 18:21
quelle
2

Versuchen Sie Folgendes:

%Vor%

Oder ersetzen

%Vor%     
tihom 03.10.2013 17:45
quelle

Tags und Links