2010-12-12 57 views

回答

2

您將數據保存到哪種類型的列?如果附件可以是任何類型,則需要一個列以確保數據僅作爲blob(二進制「大」對象)傳遞。正如其他答案中提到的那樣,這個錯誤表明發送到PostgreSQL的一些數據被標記爲UTF-8編碼的文本是無效的。

我建議您將電子郵件附件與其MIME內容類型標題一起存儲爲二進制文件。 Content-Type標頭應包含將二進制內容轉換爲附件文本所需的字符編碼,例如: 「text/plain; charset = iso-8859-1」。

如果您想要解碼的文本在數據庫中可用,您可以讓應用程序解碼它並存儲文本內容,也許有一個額外的解碼版本列。例如,如果您想在電子郵件附件上使用PostgreSQL的全文索引,那就很有用。但是,如果您只是想將它們存儲在數據庫中,以便以後進行檢索,則只需將它們存儲爲二進制文件,然後再爲應用程序的文本編碼擔憂。

0

0xa0是一個非破壞性空間,可能是latin1編碼。在Python中,我使用str.decode()和str.encode()將其從當前編碼更改爲目標編碼,這裏是'utf8'。但是我不知道你會如何在Rails中做這件事。

0

我不知道Rails的,但在PG給出了這樣的錯誤消息,它意味着:

  • 的Postgres和你的Rails客戶機之間的連接是否正確配置爲使用UTF-8編碼,這意味着所有文本數據在客戶端和Postgres之間會必須以UTF-8

  • 被encoed和你的Rails客戶端錯誤地發送在另一編碼編碼的一些數據(最有可能的Latin-1或ISO-8859):因此,Postgres的拒絕它

您必須查看數據插入到數據庫中的客戶端代碼,可能嘗試插入非Unicode字符串或發生不正確的代碼轉換。

相關問題