嗯...... 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西里尔文本的问题没有解决。 谁能告诉我这是什么问题? 附:我可以毫无问题地阅读塞尔维亚语和白俄罗斯语(西里尔语)网站,并可以在我的本地主机上输入西里尔文本。
谢谢。
答案 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。字符转换越少,并且猜测所需的正确编码,维护系统就越容易。