Zeichencodierungsfehler in Rails v3 / Ruby 1.9.2

7

Ich bekomme diesen Fehler manchmal " ungültige Byte-Sequenz in UTF-8 ", wenn ich Inhalte aus einer Datei lese. Hinweis - dies geschieht nur, wenn in der Zeichenfolge einige Sonderzeichen enthalten sind. Ich habe versucht, die Datei ohne "r: UTF-8" zu öffnen, bekomme aber immer noch den gleichen Fehler.

%Vor%

Inhalt der Datei:

%Vor%

Dies ist die CSV-Datei, die ich von außen bekommen habe, und ich versuche, sie in meine DB zu importieren. Sie kam nicht mit "# encoding: UTF-8" oben, aber ich habe das hinzugefügt, seit ich irgendwo gelesen habe behebt dieses Problem, aber es hat nicht funktioniert. : (

Umgebung:

  • Schienen v3.0.3
  • Ruby 1.9.2p0 (2010-08-18 Revision 29036) [x86_64-darwin10.5.0]
kapso 15.01.2011, 00:56
quelle

2 Antworten

16

Ruby hat eine Vorstellung von einer externen Kodierung und internen Kodierung für jede Datei. Dadurch können Sie mit einer Datei in UTF-8 in Ihrer Quelle arbeiten, selbst wenn die Datei in einem esoterischen Format gespeichert ist. Wenn Ihre standardmäßige externe Kodierung UTF-8 ist (was unter Mac OS X der Fall ist), werden alle Ihre Datei-E / A auch in UTF-8 enthalten sein. Sie können dies mit File.open('file').external_encoding überprüfen. Was Sie tun, wenn Sie Ihre Datei öffnen und "r:UTF-8" übergeben, erzwingt dieselbe externe Codierung, die Ruby standardmäßig verwendet.

Die Wahrscheinlichkeit ist groß, dass Ihr Quelldokument nicht in UTF-8 enthalten ist und diese nicht-ASCII-Zeichen nicht sauber auf UTF-8 abgebildet werden (wenn dies der Fall wäre, würden Sie entweder die korrekten Zeichen und keinen Fehler erhalten) falsch zugeordnet, erhalten Sie falsche Zeichen und keinen Fehler). Was Sie tun sollten, ist zu versuchen, die Codierung des Quelldokuments zu bestimmen, und dann Ruby das Dokument beim Lesen transcodieren zu lassen, etwa so:

%Vor%

Wenn Sie Hilfe bei der Bestimmung der Codierung der Quelle benötigen, geben Sie diese Python-Bibliothek ein. Es basiert auf der automatischen Zeichensatzerkennung, die in Seamonkey / Mozilla (und möglicherweise immer noch in Firefox) enthalten ist.

    
coreyward 15.01.2011, 01:13
quelle
6

Wenn Sie die Dateikodierung ändern möchten, können Sie die gem 'charlock holmes' verwenden

Ссылка

%Vor%

Dann können Sie Ihren neuen Inhalt in einer temporären Datei speichern und Ihre ursprüngliche Datei überschreiben.
Hoffe diese Hilfe.

    
Olivier Grimard 20.02.2012 13:09
quelle