短故事:我無法通過在Ruby on Rails應用程序中使用文本字段(使用默認的UTF-8編碼)或通過直接輸入它來獲取像'''不是一個有效的unicode字符,但在unicode字符集中?
回答
您使用的是哪個版本的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
我正在使用5.0.67。我現在正在下載mysql-5.5.3-m3-osx10.5-x86,我會在更新後發佈結果。我不知道如何將現有的數據庫轉換爲utf8mb4,因此我只需製作一個新的rails應用程序,並指定utf8mb4作爲編碼,並查看是否可以添加該字符。我假設我可以只更改database.yml文件以讀取「encoding:utf8mb4」 – 2010-06-17 10:23:53
我更新了mysql,重新安裝了rails gem,並在database.yml文件中使用「encoding:utf8mb4」創建了一個新數據庫。 有一個小但可能很重要的變化: 現在,而不是數據庫不存儲任何東西,有一個問號應該是''字符。 此外,數據庫用於失去我在違規字符後鍵入的所有內容。現在,之後的所有內容都可以毫無問題地保存下來,所以唯一的問題是該角色顯示爲?代替 。 這是進步... – 2010-06-17 11:47:40
啊,但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
如果您對它進行雙重編碼並存儲,該怎麼辦?
得到它再次編碼和存儲。並稍後檢索解碼一次,並在HTML中呈現。
我無法回答它被列爲受支持和不受支持的問題,這可能是運行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的(如果只救一個人在評論插上) 。 :-)
事實上,元信息不在頁面上,但添加它沒有任何區別。我要跟進Alan Moore關於將MySQl更新到5.5的建議,看看是否可以。 – 2010-06-17 10:16:35
@Steve:好吧,如果標題在那裏(如果你可以配置你的服務器發送它,標題是更好的方法),你不需要'meta'。當然,你也需要確定你實際發送的是UTF-8。祝你好運。 – 2010-06-17 10:45:31
U + 20089是Unicode集合(CJK Unified Ideographs Extension B)中的一個已定義字符,並且在編碼爲UTF-8時成爲字節序列F0 A0 82 89
。問題可能不在於角色,而在於您的堆棧中某處軟件處理字符。
如果不太可能發生這種情況,那麼這是一個問題字符,這很可能在Unicode standard或FAQs中涵蓋。
- 1. Unicode字符集
- 2. 有效的Unicode字符串
- 3. Unicode字符集中的「字」字符
- 4. 0xFFFF是否爲有效的Unicode字符?
- 5. R繪製一些unicode字符,但不是其他字符
- 6. HttpWebRequest的一個Unicode字符
- 7. Unicode字符串爲Unicode字符,Python 3
- 8. Unicode字符和下一個字符
- 9. F̶̟̼͕̼͎̟͔̣͉̳̌̔̉ͦ͐͠是一個有效的Unicode字符嗎?
- 10. 檢查一個變量是一個unicode字符串的列表還是隻有一個unicode字符串
- 11. 增加一個Unicode字符?
- 12. Javascript unicode字符串,中文字符,但沒有標點符號
- 13. 如何確定一個Unicode字符是否有效
- 14. python的字符串是unicode字符
- 15. 在Windows Unicode字符
- 16. Unicode字符
- 17. Unicode字符u00ff
- 18. Unicode字符
- 19. Unicode字符2.7.10
- 20. Unicode字符串
- 21. AlivePdf Unicode字符
- 22. Java Unicode字符
- 23. Unicode字符串
- 24. Unicode字符
- 25. Base64ing Unicode字符
- 26. Unicode字符
- 27. ISO-8859-1是Unicode字符集嗎?
- 28. 從TCHAR轉換爲字符*在Unicode中支持unicode字符
- 29. Unicode字符字符串
- 30. XCode中的Unicode字符無效
難道U + 20089是一個性格提出,因此具有指定的代碼點,但實際上不是一個有效的Unicode字符了嗎? – Gabe 2010-06-17 09:35:50