我有一個Rails 3.0.9應用程序在我的開發環境中本地運行,並遠程在一個heroku應用程序。我有a method that imports a CSV file into a model,這個文件可以包含非英文字符,比如°,á,é,í等(用西班牙文)。Rails 3,Heroku:Taps服務器錯誤:PGError:錯誤:無效的字節序列編碼「UTF8」:0xba
我目前能夠在我的本地開發(SQLite)數據庫沒有任何問題導入完整的文件(75k記錄);但是,隨着heroku db:push
,上傳分貝Heroku的時候失敗,我張貼在標題錯誤:
!!! Caught Server Exception
HTTP CODE: 500
Taps Server Error: PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xba
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
顯然,Heroku的具有插入「度」字的問題。 (目前該文件沒有任何A,E,I,等人物,但我懷疑這可能會失敗過。)
我在application.rb
文件的默認編碼已設置,如下所示:
#.../application.rb
config.encoding = "utf-8"
我還能做些什麼來設置'客戶端編碼'並解決這個問題?
感謝您的詳細解釋。我會按照你的建議直接在PostreSQL上開發,因爲這不是我第一次遇到這種性質的問題。 你不建議使用Iconv的用法。我如何將它應用於導入方法?或者是我應該用Iconv清理CSV文件? (假設我無法直接獲取UTF-8中的文本) – bruno077
@ bruno077:你可以通過整個SQLite數據庫來修改編碼('fixed = Iconv.iconv(....,sqlite_string);'然後寫'fixed'回到數據庫中),然後在SQLite本地編碼完成後從SQLite上載。最終所有的東西都是UTF-8,直到那時我們纔會受苦(但情況肯定比十年前好)。 –
非常感謝您的幫助。我會標記你的答案! – bruno077