‘𠂉’不是有效的unicode字符,但在unicode字符集中?

简短的故事:我不能通过使用Ruby on Rails应用程序中的文本字段(使用默认的UTF-8编码)或直接使用MySQL GUI输入,将像’𠂉’这样的实体存储在MySQL数据库中应用程序。

据我所知,所有中文字符和字根都可以毫无问题地输入数据库,但不是这些很少输入的“字符组件”。 上面提到的字符是unicode U + 20089和html实体𠂉 我可以通过输入𠂉并删除html转义来在页面上显示它,但我想将其存储为unicode字符并保持html转义到位。 还有许多其他中国“组件”(全部字符的一部分,通常由2或3个笔画组成)导致同样的问题。

根据这个页面,提到的字符在UTF-8字符集中: http : //www.fileformat.info/info/unicode/char/20089/charset_support.htm

但是在邻近的’… 20089 / index.htm’页面上,有一个警告说它不是一个有效的unicode字符。

作为参考,可以在Mac OS X中找到该实体,方法是搜索字符调色板(国际菜单,“显示角色调色板”),通过激进搜索,并查看“丿”激进。

抱歉,如果这太开放了……这样的角色可以存储在基于UTF-8的数据库中吗? 如何支持和不支持此字符,这两个字符都存在于字符集中且无效?

您使用的是哪个版本的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

U + 20089是Unicode集( CJK统一表意文字扩展B )中的已定义字符,并且当编码为UTF-8时变为字节序列F0 A0 82 89 。 问题可能不在于字符,而在于堆栈中某处的软件处理字符。

万一存在这种问题特征的固有技术原因,可能会在Unicode标准或常见问题解答中进行介绍 。

如果你对它进行双重编码并存储怎么办?

再次编码并存储。 然后在检索时解码一次并在html中渲染。

我无法回答它被列为支持和不支持的问题,这可能是运行fileformat.info站点的人的问题。

UTF-8可用于表示任何 Unicode字符(代码点)。 所有的UTF都是如此。 这样做所需的字节数会有所不同(例如,在UTF-8中,您需要四个用于您标识的代码点,而您只需要一个用于罗马字母’A’),但所有Unicode字符都可以表示为所有的UTF。 这就是他们的目的。 ( 更多这里 。)

听起来好像您在应用中的一个(或多个)图层遇到了编码问题。 首先要看的是您的应用所提供的页面:它是否说明了它正在使用的字符集? 可能值得检查为您的网页返回的标头,看看它们是否有:

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

…在他们中。 如果他们不这样做,请在HTML本身中查找等效的meta标记,尽管我似乎记得读过meta不是一个很好的方法。 缺少标题是特定的,默认应用可能是ISO-8859-1 (虽然某些浏览器可能使用Windows-1252 ),如果您的源文本使用UTF-8编码,则无法使用。

接下来要看的是你的数据库。 我不认为MySQL默认以UTF-8存储文本,你需要确保它在你的MySQL配置中这样做。

从您的问题来看,我认为不需要它,但我将完成必须使用Joel Spolsky( 绝对最低每个软件开发人员,绝对必须知道关于Unicode和字符集(没有借口!)的文章 。如果只是为了挽救某人将其插入评论中)。 🙂