如何转换这些奇怪的字符? (Ã,Ã,Ã,ù,Ã)

时间:2011-02-26 15:26:53

标签: php mysql character-encoding mojibake utf8-decode

我的页面经常显示Ã,Ã,Ã,ù,Ã等代替普通字符的内容。

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

4 个答案:

答案 0 :(得分:46)

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

答案 1 :(得分:24)

如果你看到那些角色,你可能就没有specify the character encoding properly。因为这些字符是使用ISO 8859-1Windows-1252等单字节编码解释UTF-8多字节字符串时的结果。

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

答案 2 :(得分:12)

尽管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>是表中列的名称。这是一个非常好的检查列表,用于那些通常不良的编码窗口-1252到utf-8字符 - &gt; Debugging Chart Mapping Windows-1252 Characters to UTF-8 Bytes to Latin-1 Characters

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

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

答案 3 :(得分:1)

我实际上发现了一些对我有用的东西。它将文本转换为二进制,然后转换为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;

请原谅我任何格式错误