2010-06-17 41 views

回答

11

您使用的是哪個版本的MySQL?如果它在5.5之前,則不能存儲該字符,因爲它需要四個字節,並且MySQL僅支持最多三個字節的UTF-8(即BMP中的字符)。 MySQL 5.5增加了對四字節UTF-8的支持,但是你必須指定utf8mb4作爲字符集。

裁判:http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html

+0

我正在使用5.0.67。我現在正在下載mysql-5.5.3-m3-osx10.5-x86,我會在更新後發佈結果。我不知道如何將現有的數據庫轉換爲utf8mb4,因此我只需製作一個新的rails應用程序,並指定utf8mb4作爲編碼,並查看是否可以添加該字符。我假設我可以只更改database.yml文件以讀取「encoding:utf8mb4」 – 2010-06-17 10:23:53

+0

我更新了mysql,重新安裝了rails gem,並在database.yml文件中使用「encoding:utf8mb4」創建了一個新數據庫。 有一個小但可能很重要的變化: 現在,而不是數據庫不存儲任何東西,有一個問號應該是''字符。 此外,數據庫用於失去我在違規字符後鍵入的所有內容。現在,之後的所有內容都可以毫無問題地保存下來,所以唯一的問題是該角色顯示爲?代替 。 這是進步... – 2010-06-17 11:47:40

+0

啊,但Rails並沒有真正使表utf8mb4!不知道我將來會如何自動實現這一點,但這就是我現在所做的......使用MySQL GUI,我使用在http://www.microsoft.com/downloads/details.aspx上提供的SQL查詢將表和每個相關列修改爲utf8mb4。 //dev.mysql.com/doc/refman/5.5/en/charset-unicode-upgrading.html。瞧。長命 。謝謝! – 2010-06-17 12:36:14

0

如果您對它進行雙重編碼並存儲,該怎麼辦?

得到它再次編碼和存儲。並稍後檢索解碼一次,並在HTML中呈現。

0

我無法回答它被列爲受支持和不受支持的問題,這可能是運行fileformat.info網站的人員的問題。

UTF-8可用於表示任何 Unicode字符(代碼點)。所有的UTF都是如此。這樣做所需的字節數有所不同(例如,在UTF-8中,需要四個代碼點,而羅馬字母'A'只需要一個),但所有Unicode字符都可以表示爲所有的UTF。這就是他們的目的。 (More here。)

聽起來好像您正在運行到應用程序中一個(或多個)圖層的編碼問題。第一個看的地方是你的應用程序提供的頁面:它說明它使用的是什麼字符集?這可能是值得檢查標題返回您的網頁,看看他們是否有:

Content-Type: text/html; charset="UTF-8" 

...在其中。如果他們不這樣做,查找在HTML本身相當於meta標籤,但我似乎記得讀取meta不做到這一點的好辦法。如果缺少標題是具體,應用的默認將可能是ISO-8859-1(儘管有些瀏覽器可以使用Windows-1252代替),如果你的源文本使用UTF-8編碼,這將無法正常工作。

下一個要看的地方是你的數據庫。我不認爲在UTF-8在默認情況下的MySQL存儲文本,你需要確保它在做什麼,在你的MySQL配置。

從你的問題,我不認爲你需要它,但我會義不容辭的插頭完成的文章The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)由Joel Spolsky的(如果只救一個人在評論插上) 。 :-)

+0

事實上,元信息不在頁面上,但添加它沒有任何區別。我要跟進Alan Moore關於將MySQl更新到5.5的建議,看看是否可以。 – 2010-06-17 10:16:35

+0

@Steve:好吧,如果標題在那裏(如果你可以配置你的服務器發送它,標題是更好的方法),你不需要'meta'。當然,你也需要確定你實際發送的是UTF-8。祝你好運。 – 2010-06-17 10:45:31

1

U + 20089是Unicode集合(CJK Unified Ideographs Extension B)中的一個已定義字符,並且在編碼爲UTF-8時成爲字節序列F0 A0 82 89。問題可能不在於角色,而在於您的堆棧中某處軟件處理字符。

如果不太可能發生這種情況,那麼這是一個問題字符,這很可能在Unicode standardFAQs中涵蓋。