55

我的页面经常显示诸如 ë、Ã、ì、ù、à 之类的东西来代替普通字符。

我使用 utf8 作为标题页和 MySQL 编码。这是怎么发生的?

4

4 回答 4

47

这些是 utf-8 编码字符。使用utf8_decode()将它们转换为普通的 ISO-8859-1 字符。

于 2011-02-26T15:28:27.593 回答
29

如果您看到这些字符,您可能只是没有正确指定字符编码因为这些字符是使用ISO 8859-1Windows-1252等单字节编码解释 UTF-8 多字节字符串时的结果。

在这种情况下ë,可以用 0xC3 0xAB 编码,表示ëUTF-8 中的 Unicode 字符 (U+00EB)。

于 2011-02-26T15:47:49.490 回答
14

尽管这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>, "ù", "ù")

where<table>是mysql表<field>的名称,是表中列的名称。对于那些通常编码错误的 windows-1252 to utf-8 characters -> Debugging Chart Mapping Windows-1252 Characters to UTF-8 Bytes to Latin-1 Characters ,这是一个非常好的清单。

请记住在尝试用 SQL 替换任何字符之前备份您的表

[我知道这是一个非常古老的问题的答案,但再次面临这个问题。一些旧的 Windows 机器在将文本插入 utf8_general_ci 整理表之前没有正确编码文本。]

于 2014-12-04T09:20:59.877 回答
5

我实际上找到了对我有用的东西。它将文本转换为二进制,然后转换为 UTF8。

有编码问题的源文本: 如果“是”,那么您的最后一个是什么

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;

请原谅我的任何格式错误

于 2020-07-17T11:52:17.713 回答