2010-12-16 68 views
4

不兼容的字符編碼:UTF-8和ASCII-8BIT的Rails 3 - (不兼容的字符編碼:UTF-8和ASCII-8BIT):

我發現很多的舊信息,但這個建議很少錯誤信息,但想知道目前的狀態是什麼,因爲似乎圍繞網絡討論的不多。當我嘗試從包含重音字符的區域設置文件(例如「é」)渲染文本時,會發生這種情況。

我使用rails 3.0.3,ruby 1.9.2(並試過1.8.7,結果相同),mysql2 adapter,utf8編碼。

+3

我無法回答Ruby,但基本上沒有8位ASCII這樣的東西。 http://en.wikipedia.org/wiki/ASCII是一個7位編碼,其位數從未設置。 「é」存在於* nix 8位編碼中,例如http://en.wikipedia.org/wiki/ISO/IEC_8859-1,Windows編碼,例如http://en.wikipedia.org/wiki/Windows-1252和Apple Macintosh編碼器,例如http://en.wikipedia.org/wiki/Mac_OS_Roman。它在MacRoman中的位置不同於其他兩個,並且需要UTF-8中的兩個字節。 – hippietrail 2010-12-17 11:38:24

+0

您是否擁有導致此問題的原始電子郵件的副本?我碰到類似的東西,很想有一個很好的測試電子郵件(因爲比我想解釋的更復雜的原因,我不能得到那個對我來說不合適的東西) – jwg2s 2014-08-07 15:38:24

回答

2

我記得使用「字符串」一次解決這個.force_encoding(「UTF-8」)

3

時有多麼我的Ruby應用程序正在解析字符串,以及如何在數據庫之間的encoding mismatch我已經得到了這個錯誤存儲它們。

要當我處理UTF-8解決這個問題我自己,我要確保我有這個在有關的.rb文件的頂部:

# encoding: utf-8 

或者,你可以在全局設置默認UTF-8編碼在應用程序配置文件與this line

Encoding.default_internal, Encoding.default_external = ['utf-8'] * 2 

最後,我要確保我的數據庫使用UTF-8內部通過設置在database.yml中的encoding選項:

development: 
    adapter: postgresql 
    encoding: UTF8 
    database: pg_development 
    username: abe 
    pool: 5 
+0

最後,我的問題是由靜態I18n文件,通過一些用於管理翻譯的插件Web界面保存二進制數據。尋找像天一樣的東西:!binary | RMOtYQ ==在你的i18n文件中。 – mark 2011-06-22 18:35:18

2

暫且,這可以通過在issue郵件2.5.4,其引起「污染」的郵件對象的編碼。

@email = Email.find(1) 
@email.body.encoding # This is a fresh instance from db, still okay 
Mail.new(@email.body) 
@email.body.encoding # value has been changed 
相關問題