我有一个表格,我存储了一些文字标签。最初它是使用latin_swedish_ci(默认)排序规则构建的。
现在我需要支持其他语言,比如俄语。我有两个消耗这些标签的页面。一个显示它们很好,尽管表仍然是拉丁校对而不是utf8_generic_ci,但是另一个页面仍然显示垃圾。当我查看源代码时,它看起来像这样:
\ u00d0 \ u00a4 \ u00d0 \ u00b8 \ u00d0 \ u00bb \ u00d1 \ u0152 \ u00d1 \ u201a \ u00d1 \ u20ac \
两个页面都有:
<META http-equiv="Content-type" content="text/html;charset=UTF-8">
我错过了什么?
更新:
我不知道为什么以及它是如何工作的,但我最终在我的查询插入/更新之前和在页面上呈现之前添加了以下内容并修复了我的所有问题:
mysql_query("SET NAMES utf8");
如果你太浪费时间尝试元标记和标题,请给这个解决方案一个旋转。
答案 0 :(得分:0)
不使用mysql_*
界面;切换到mysqli_*
。
你可能想要像Фил...
这样的东西?
要弄得一团糟,可能有两个错误。
meta
标签很好;需要SET NAMES utf8
。
但是你可能已经在桌面上存放了垃圾。所以,让我们看一下表:SELECT col, hex(col) FROM tbl...
对于Фил
,您应该看到D0A4D0B8D0BB
的十六进制。如果您看到C390C2A4C390C2B8C390C2BB
,则您有&#34;双重编码&#34;。相反,似乎你得到了&#34; unicode&#34;而不是&#34; utf8&#34;,可能来自&#34; latin1&#34;你开始了。请注意D0 A4 D0 B8 D0 BB
在我的十六进制和\u00d0...
?
如果你可以重新开始,那就这样做:
SET NAMES utf8
CHARACTER SET utf8
<meta charset=UTF-8>
如果你无法重新开始,那么我们会看到SELECT
我要求的; 也许我可以找到一种方法来挽救你的数据。