2010-06-17 87 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中涵盖。