"�" 具有latin-1( iso-8859-1) 中的以下字符:
303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
257 175 AF ¯ MACRON
302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
277 191 BF ¿ INVERTED QUESTION MARK
275 189 BD ½ VULGAR FRACTION ONE HALF
字节序列为,则C3 AF C2 BF C2 BD。这“闻起来”像 UTF-8。解码(根据https://en.wikipedia.org/wiki/UTF-8),我们将它们转换为位模式:
- 11000011
- 10101111
- 11000010
- 10111111
- 11000010
- 10111101
第一个 (110xxxxxx) 表示它是两字节字符中的第一个字节,并从11000011 10101111yield...00011 ..101111或00000000 00000000 00000000 11101111==中剥离标记位U+000000EF。
同样,接下来的两个 make ...00010 ..111111or U+000000BF。
然后...00010 ..111101或U+000000BD。
U+00EF U+00BF U+00BD(根据https://en.wikibooks.org/wiki/Unicode/Character_reference/0000-0FFF)是“�”,这显然是不对的。
然而,这个答案——https ://stackoverflow.com/a/6544206/1105015——似乎提供了一些见解。EF BF BD是“替换字符”的 UTF-8 表示U+FFFD。因此,看起来有些东西让您的系统感到困惑,它被存储为替换字符,然后最终重新渲染为 latin-1。
我建议在这一点上仔细查看实际上是您在插入 db 时使用的编码。也许唯一改变的是用于此的 MySQL 客户端?