我创建了一个存储中欧国家信息的数据库。我很难让这些国家/地区的字符集正确使用,因为它们有很多特殊字符。我知道“ iso-8859-2 Latin 2”字符集用于中欧国家,但是当我尝试更改数据库和表字符集设置(通过phpmyadmin)时,它似乎并没有完全删除“乱码”字符。”我一直在尝试遵循this link's guide来解决问题。
下面是数据库第一行的示例:
�esk� republik', 'CZ', '100 00', 'Praha 10-Stra�nice (?�st) x)',
'Hlavn� m?sto Praha', 1)
Here is the whole MySQL dump file
非常感谢您的光临。
答案 0 :(得分:1)
Github链接实际上是在谈论Mojibake,而不是“双重编码”。
您使用的是捷克字符,对吗?在该输出片段中,我看到了两个失败的地方:“带问号的黑色菱形”和“普通问号”。它们分别在Trouble with UTF-8 characters; what I see is not what I stored
中处理但是,在尝试解决该问题之前,请弄清 client 中正在使用哪种编码。
黑钻石(�esk�
)
案例1(客户端使用的是latin2
,而不是utf8`):
SET NAMES
和INSERT
的连接(或SELECT
)未设置为客户端的编码(latin2
或utf8
或{{1} })。utf8mb4
。 (是的,您可以将其存储为latin2,但是由于您需要修复问题,因此我们使用首选编码。)情况2(原始字节为UTF-8):
CHARACTER SET utf8mb4
的连接(或SET NAMES
)不是utf8 / utf8mb4。解决这个问题。SELECT
(或utf8mb4)。问号(普通的,不是黑钻石)(CHARACTER SET utf8
):
m?sto
。)由于缺少SHOW CREATE TABLE
,黑菱形往往只是浏览器的问题。当今大多数浏览器 都默认使用该设置,但可能会感到困惑。
请参阅链接,以使用<meta charset=UTF-8>
调试已存储的内容。
SELECT col, HEX(col) ...
因此,我想您实际上是在使用CONVERT(CONVERT(CONVERT(BINARY('éáčďéěíňóřšťúůýž') USING utf8) USING latin1) USING utf8)
--> '��??�?�?�?�?�?��
,而不是latin1
。运行
latin2
需要根据客户端中的编码设置这3个。