我的页面经常显示像ë,Ã,ì,ù,Ã在正常字符的位置。
我在标题页和MySQL编码中使用utf8。这是怎么发生的?
我在标题页和MySQL编码中使用utf8。这是怎么发生的?
这些是UTF-8编码的字符。使用utf8_decode()将它们转换成普通的ISO-8859-1字符。
在这种情况下,ë
可以用0xC3 0xAB进行编码,表示UTF-8中的Unicode字符ë
(U+00EB)。
ë
在 Unicode 字符集中的代码点为 0xEB,并且使用 UTF-8 编码时编码为 0xC3AB。但是,当使用不同的字符编码进行解释时,这个字节序列代表的内容也会有所不同。例如,在 ISO 8859-1 和 Windows-1252 中,它表示两个字符 Ã
(0xC3)和 «
(0xAB)。 - Gumbo尽管 utf8_decode
是一个有用的解决方案,但我更喜欢在表格本身上纠正编码错误。在我看来,更好的方法是直接纠正不良字符,而不是在代码中进行“黑科技”处理。只需在表格字段上执行replace
即可纠正 OP 中的不良编码字符。
update <table> set <field> = replace(<field>, "ë", "ë")
update <table> set <field> = replace(<field>, "Ã", "à")
update <table> set <field> = replace(<field>, "ì", "ì")
update <table> set <field> = replace(<field>, "ù", "ù")
其中<table>
是mysql表的名称,<field>
是表中列的名称。以下是一个非常好的清单,适用于通常将错误编码的windows-1252转换为utf-8字符 -> Debugging Chart Mapping Windows-1252 Characters to UTF-8 Bytes to Latin-1 Characters。
记得在尝试使用SQL替换任何字符之前备份您的表格!
[我知道这是对一个非常旧的问题的回答,但我再次遇到了这个问题。一些旧的Windows机器在将文本插入到utf8_general_ci排序的表之前没有正确地进行编码。]
我实际上找到了一种适用于我的方法。它将文本转换为二进制,然后转换为UTF8。
源文本存在编码问题: If ‘Yes’, what was your last
SELECT CONVERT(CAST(CONVERT(
(SELECT CONVERT(CAST(CONVERT(english_text USING LATIN1) AS BINARY) USING UTF8) AS res FROM m_translation WHERE id = 865)
USING LATIN1) AS BINARY) USING UTF8) AS 'result';
纠正后的结果文本:
如果是‘是’,你上一次使用的是什么?
我的源代码被错误地编码了两次,所以我不得不进行两次修复。只需一次修复,您可以使用以下命令:
SELECT CONVERT(CAST(CONVERT(column_name USING latin1) AS BINARY) USING UTF8) AS res FROM m_translation WHERE id = 865;
<meta charset="UTF-8">
,或者在您的PHP脚本顶部使用header("Content-Type: text/html; charset=utf-8");
。我假设这实际上还没有发生。 - mario