2009-07-13 82 views
0

我發現我的Rails應用程序返回到位雙引號和某些破折號,它返回一個問號character--mysql的編碼問題

有沒有一種方法來更新表,並與原有的替換它們字符?

謝謝!

阿米

+0

字符編碼? UTF-8? – 2009-07-13 16:48:49

+0

是的。http內容標題指定UTF-8。我想知道是否有辦法重寫它。這篇文章(http://www.validome.org/lang/en/errors/HTML-CHARSET)說http報頭具有更高的優先級。 – Grnbeagle 2009-07-15 17:12:30

回答

0
update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]'); 

應該做的伎倆。首先對測試數據庫運行,直到你知道它不會破壞任何東西。

使用此聲明需要您自擔風險。

+0

感謝您的建議。查找和替換的一個問題是我不確定要找到哪個字符串。從mysql控制檯,他們都顯示爲「?」 (包括那些特殊字符和合法的問號字符)我希望有一些我可以調整的編碼設置。任何建議表示讚賞。 – Grnbeagle 2009-07-13 17:31:13

1

這些將是 「智能引號」 和EM-或EN-破折號(「 」 ‘ ’ — –)。微軟應用程序傾向於使用那些代替完美的ASCII等價物,引號,撇號和連字符的應用程序。他們還將文本保存爲windows-1252,這是ISO-8859-1字符編碼的微軟擴展,其中包括用於那些花式字符的映射,以替代128..159範圍內的(確定無用的)控制字符。

因此,當你需要使用windows-1252的時候,你需要解碼文本爲ISO-8859-1或UTF-8甚至是ASCII碼(或者讓系統默認爲其中一種編碼) 。有關真實問題的更多背景信息,請參見google「demoronizer」或「ASCII Dammit」。

+0

感謝您的信息。正如你所建議的,我查了一下windows-1252編碼的更多信息。似乎http響應頭(指定爲UTF-8)優先於元字符集,所以我無法改變ad-hoc編碼。這是有關該主題的信息:http://www.cs.tut.fi/~jkorpela/www/windows-chars.html – Grnbeagle 2009-07-15 17:10:07

1

這些問號指示的結果顯示在環境的編碼無效字節。

這些天環境將是UTF-8。

如果您運行MySQL控制檯應用程序,運行以下命令,當你第一次連接到告訴MySQL服務器返回的所有結果以UTF-8 當前連接

SET NAMES utf8; 

在軌,你可以讓ActiveRecord在你的database.yml文件中加入「encoding:utf8」來打開一個db連接。您還應該確保您的網絡服務器(apahce/nginx/etc)發送utf-8 HTTP標頭,並確保您的HTML文件具有Content-Type元標記。

這可能會損壞存儲在數據庫中的字節,這不會有幫助。如果是這樣的話,那麼你就會樂此不疲地嘗試清理它:)

+0

有同樣的問題...添加編碼:utf8到database.yml使 字符正確顯示。謝謝,我忘記了:) – foz 2010-03-19 13:30:53