html页面显示西里尔符号OK,如果包含charset = windows-1251,但不包含utf-8

时间:2011-11-23 05:53:43

标签: mysql utf-8 character-encoding internationalization cp1251

嗯...... Html页面和mysql表包含西里尔文本。 为了显示西里尔文本Барысаў2000,我使用

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

在网页上。 为了在MySQL表中存储该单词,使用 utf8_unicode_ci 排序规则(我已经阅读了一些主题,据我所知,建议使用utf8_unicode_ci来存储西里尔符号)。 但是,我实际上看到使用phpMyAdmin,文本Барысаў2000在数据库中存储为Áàðûñà¢2000,这就是我想要解决的问题。 (POST方法+转义危险符号用于将用户的文本保存到db中)。 但是,当您选择该数据并将其显示在html页面上时,它看起来很好:Барысаў2000。

phpMyAdmin如何为我显示它的问题直到今天才打扰我。今天我试图解决它。

我猜我到处都要使用utf-8,所以我从

切换
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

现在我的页面显示问题而不是西里尔符号,我的数据库中的displayng西里尔文本的问题没有解决。 谁能告诉我这是什么问题? 附:我可以毫无问题地阅读塞尔维亚语和白俄罗斯语(西里尔语)网站,并可以在我的本地主机上输入西里尔文本。

谢谢。

1 个答案:

答案 0 :(得分:2)

phpMyAdmin的问题可能是由不正确的字符编码猜测引起的。如果使用charset Барысаў2000对文本windows 1251进行编码,则最终会得到一个字节流C1 E0 F0 FB F1 E0 A2 32 30 30 30 0D 0A。如果此字节流被解释为使用ISO-8859-1或Windows-1252编码的文本,则结果显示为Áàðûñà¢2000

这表明数据库中的字符串实际上是使用windows-1251编码存储的。然后,如果输出这些字符串并且只声称它使用UTF-8编码(不进行任何重新编码),则结果将是垃圾文本,因为该字节流包含无效的UTF-8字节序列。

您应该继续使用windows-1251字符集为页面提供服务,并告诉phpMyAdmin也要使用此字符集,或者您应该在任何地方(也在内部,在数据库中)切换到unicode。字符转换越少,并且猜测所需的正确编码,维护系统就越容易。