短故事:我无法通过在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. R绘制一些unicode字符,但不是其他字符
- 3. HttpWebRequest的一个Unicode字符
- 4. Unicode字符串为Unicode字符,Python 3
- 5. Unicode字符和下一个字符
- 6. F̶̟̼͕̼͎̟͔̣͉̳̌̔̉ͦ͐͠是一个有效的Unicode字符吗?
- 7. 检查一个变量是一个unicode字符串的列表还是只有一个unicode字符串
- 8. Base64ing Unicode字符
- 9. 从TCHAR转换为字符*在Unicode中支持unicode字符
- 10. Unicode字符字符串
- 11. XCode中的Unicode字符无效
- 12. 正确的字符集在PHP中使用越南字符(这不是Unicode)
- 13. 拆分字符串,unicode,unicode,python中的字符串
- 14. 的PDFlib Unicode字符
- 15. Unicode字符串中的奇数字符
- 16. 字符串中的Unicode字符 - iphone
- 17. 在Unicode中将unicode字符串转换为可用的unicode
- 18. 如何测试一个字符串是否有一个unicode字符?
- 19. “丢失的Unicode字符”框是一个Unicode字符本身,如果是,哪一个?
- 20. 字符的UNICODE名字
- 21. Unicode数字的字符类
- 22. 操纵Unicode和ASCII字符集在C#
- 23. Sql表中的Unicode字符
- 24. Jekyll类中的Unicode字符
- 25. iText中的Unicode字符PDF
- 26. Listview中的Unicode字符c#
- 27. Hive中的Unicode字符
- 28. __str__中的Python unicode字符
- 29. C#中的Unicode字符串#
- 30. IDLE中的Unicode字符
难道U + 20089是一个性格提出,因此具有指定的代码点,但实际上不是一个有效的Unicode字符了吗? – Gabe 2010-06-17 09:35:50