Ruby String.encode gibt immer noch "ungültige Bytefolge in UTF-8"

7

In IRB versuche ich Folgendes:

%Vor%

Irgendwelche Ideen, was schief läuft?

    
drewinglis 05.05.2012, 21:31
quelle

3 Antworten

21

Ich vermute, dass "\xBF" bereits denkt, dass es in UTF-8 kodiert ist. Wenn Sie also encode aufrufen, denkt es, dass Sie versuchen, eine UTF-8-Zeichenfolge in UTF-8 zu codieren / p> %Vor%

\xBF ist nicht gültig UTF-8, also ist das natürlich Unsinn. Wenn Sie jedoch die drei Argumente von encode verwenden:

  

encode (dst_encoding, src_encoding [, Optionen]) → str

     

[...] Das zweite Formular gibt eine Kopie von str zurück, die von src_encoding nach dst_encoding transcodiert wurde.

Sie können das Problem erzwingen, indem Sie encode anweisen, zu ignorieren, was der String für seine Codierung hält, und ihn als Binärdaten behandeln:

%Vor%

Dabei ist s die "\xBF" , die von oben UTF-8 denkt.

Sie können auch force_encoding auf s erzwingen Es muss binär sein und dann das Zwei-Argument encode :

verwenden %Vor%     
mu is too short 05.05.2012, 21:50
quelle
2

Dies ist behoben, wenn Sie die Quelltextdatei mit einer expliziten Codepage lesen:

%Vor%     
pavel.mileshchenko 19.03.2013 18:41
quelle
2

Wenn Sie nur mit ASCII-Zeichen arbeiten, können Sie

verwenden %Vor%

Aber was passiert, wenn wir denselben Ansatz mit gültigen UTF8-Zeichen verwenden, die in ascii ungültig sind

%Vor%

Oh oh! Wir wollen, dass frío im Akzent bleibt. Hier ist eine Option, die die gültigen UTF8-Zeichen enthält

%Vor%

Auch in Ruby 2.1 gibt es eine neue Methode namens scrub , die dieses Problem löst

%Vor%     
Eric Northam 30.11.2014 03:19
quelle

Tags und Links