短篇小说:我无法将像“
4 回答
您使用的是哪个版本的 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 统一表意文字扩展 BF0 A0 82 89
)中定义的字符,并且在编码为 UTF-8 时成为字节序列。问题可能不在于字符,而在于堆栈中某处的软件对字符的处理。
万一这是一个问题字符存在固有的技术原因,它很可能包含在Unicode 标准或常见问题解答中。
我无法回答它被列为支持和不支持的问题,这可能是运行 fileformat.info 站点的人的问题。
UTF-8 可用于表示任何Unicode 字符(代码点)。这适用于所有 UTF。执行此操作所需的字节数各不相同(例如,在 UTF-8 中,您需要四个用于识别的代码点,而您只需要一个用于罗马字母“A”),但所有 Unicode 字符都可以表示为所有 UTF。这就是他们的目的。(更多在这里。)
听起来好像您在应用程序的一个(或多个)层上遇到了编码问题。首先要查看的是您的应用提供的页面:它是否说明了它使用的字符集?可能值得检查为您的页面返回的标题以查看它们是否具有:
Content-Type: text/html; charset="UTF-8"
...在他们中。如果他们不这样做,请meta
在 HTML 本身中查找等效标记,尽管我似乎记得阅读这meta
不是一个好方法。如果没有特定的标头,则应用的默认值可能是ISO-8859-1(尽管某些浏览器可能使用Windows-1252代替),如果您的源文本使用 UTF-8 编码,这将不起作用。
下一个要看的地方是您的数据库。我不认为 MySQL 默认情况下以 UTF-8 存储文本,您需要确保它在您的 MySQL 配置中这样做。
从您的问题来看,我认为您不需要它,但我将完成Joel Spolsky的文章The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)如果只是为了避免有人将其插入评论中)。:-)
如果您对其进行双重编码并存储怎么办?
再次对其进行编码并存储。稍后在检索时将其解码一次并以 html 呈现。