"�" 具有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 10101111
yield...00011 ..101111
或00000000 00000000 00000000 11101111
==中剥离标记位U+000000EF
。
同样,接下来的两个 make ...00010 ..111111
or 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 客户端?