2010-12-12 10 views

Antwort

2

In welcher Spalte speichern Sie Ihre Daten? Wenn der Anhang von irgendeinem Typ sein kann, benötigen Sie eine bytea Spalte, um sicherzustellen, dass die Daten einfach als Blob (binäres "großes" Objekt) übergeben werden. Wie in anderen Antworten erwähnt, weist dieser Fehler darauf hin, dass einige an PostgreSQL gesendete Daten, die in der UTF-8-Codierung als Text markiert waren, ungültig waren.

Ich würde empfehlen, dass Sie E-Mail-Anhänge als binär zusammen mit ihrer MIME-Content-Type-Header speichern. Der Content-Type-Header sollte die Zeichencodierung enthalten, die benötigt wird, um den binären Inhalt in Text für Anhänge zu konvertieren, wenn dies sinnvoll ist: z.B. "text/plain; charset = iso-8859-1".

Wenn der dekodierte Text in der Datenbank verfügbar sein soll, können Sie ihn von der Anwendung dekodieren lassen und den Textinhalt speichern, möglicherweise mit einer zusätzlichen Spalte für die decodierte Version. Das ist nützlich, wenn Sie beispielsweise PostgreSQLs Volltextindizierung für E-Mail-Anhänge verwenden möchten. Wenn Sie sie jedoch nur für den späteren Abruf in der Datenbank speichern möchten, speichern Sie sie einfach als Binärdaten und lassen Sie sich Sorgen um die Textverschlüsselung in der Anwendung machen.

0

Die 0xa0 ist ein nicht brechendes Leerzeichen, möglicherweise Latin1-Codierung. In Python würde ich str.decode() und str.encode() verwenden, um es von der aktuellen Kodierung in die Zielkodierung, hier 'utf8', zu ändern. Aber ich weiß nicht, wie Sie in Rails vorgehen würden.

0

Ich weiß nicht, über Rails, aber wenn PG diese Fehlermeldung gibt es bedeutet, dass:

  • die Verbindung zwischen Postgres und Rails-Client korrekt konfiguriert ist utf-8-Codierung zu verwenden, dass alle Sinn Textdaten zwischen dem Client und postgres gehen muss in einer anderen Kodierung (höchstwahrscheinlich Latin-1 oder ISO-8859) codiert in utf-8

  • und Rails-Client fälschlicherweise gesendet einige Daten encoed werden: deshalb postgres lehnt es

Sie müssen in Ihrem Client-Code nachsehen, wo die Daten in die Datenbank eingefügt werden, wahrscheinlich versuchen Sie, eine Nicht-Unicode-Zeichenfolge einzufügen, oder es findet eine unkorrekte Transkodierung statt.

Verwandte Themen