2011-09-01 26 views
0

當我從API調用中插入某些字符串到我的數據庫時,它們會在某些字符處被截斷。這與紅寶石1.8.7。我已將所有設置設置爲utf8應用程序範圍並在MySQL中。我通常在應用程序的其他部分將utf8內容輸入數據庫時​​沒有任何問題。爲什麼ActiveRecord和/或MySQL對這個角色有問題?

它應該是「El Soldado y LaMuñeca」。如果我把它插入到數據庫中,只有這樣:「11 El Soldado y La Mu」。

 
>> name 
=> "11 El Soldado y La Mu?eca(1).mp3" 
>> name[20..20] 
=> "u" 
>> name[21..21] 
=> "\361" 
>> name[22..22] 
=> "e" 
  1. 是一個UTF8字符?
  2. 我知道,紅寶石1.8不是編碼感知,但說實話,我總是忘記這應該如何影響我 - 我總是把所有其他層的一切設置爲UTF8,一切都很好。爲什麼現在不工作?

更新

CORRECTION--我錯了,它不是從API的到來,它從文件系統中來。

錯誤編碼的字符來自屋內

新的問題:How can I get utf8 characters from File#path

+0

我不是一個Ruby人,所以這可能是一個愚蠢的建議,但*連接*編碼也設置爲UTF-8?我認爲它在每個平臺的默認爲ISO-8859-1 –

+0

是的,連接設置爲utf8太 –

+0

看到我的新問題... http://stackoverflow.com/questions/7266815/how-can-i-get -utf8-characters-from-filepath –

回答

2

你以某種方式得到一個Latin-1(AKA ISO-8859-1)ñ,而不是一個UTF-8 ñ。在Latin-1中,ñ是八進制數361(因此,您的單個字節爲"\361")。在UTF-8中,小寫字母tilde-n應該是\303\261(即八進制字節0303和0261或十六進制0xc3和0xb1)。

您可能必須在Ruby端開始玩Iconv,以確保您以UTF-8獲得所有內容。

+0

啊,所以361是*八進制*。我在想。 +1 –

+0

好吧,我一直在問錯誤的問題(再次)。看到上面的更新和這個新的問題:http://stackoverflow.com/questions/7266815/how-can-i-get-utf8-characters-from-filepath –

+0

@Pekka:你在正確的軌道與ISO- 8859-1。任何以「3」開頭的字節都會讓我想起八進制,但我必須查看Latin-1表。 –