joe*_*els 1 c character-encoding
我在 latin1 表中有一个字符串“Art\xc3\xaest\xc3\xa9”。我使用 C mysql 连接器从表中获取字符串。我将character_set_connection 设置为utf8。
\n\n在调试器中它看起来像:
\n\n"Art\\xeest\\xe9"\nRun Code Online (Sandbox Code Playgroud)\n\n如果我用 printf ("%02X", (unsigned char) a[i]); 打印十六进制值 对于我得到的每个字符
\n\n41 72 74 EE 73 74 E9\nRun Code Online (Sandbox Code Playgroud)\n\n我怎么知道它是utf8还是latin1?
\n\x74\xee\x73不是有效的 UTF-8 序列,因为 UTF-8 从来不会只运行 1 个字节且设置了最高位。所以两者中,它一定是Latin-1。
但是,如果您看到的字节是有效的 UTF-8 数据,那么并不总是可以排除它可能是 Latin-1,而恰好也是有效的 UTF-8。
Latin-1 确实有一些无效字节(ASCII 控制字符0x00-0x1F和未使用的范围0x7f-0x9F),因此您可以确定有些 UTF-8 字符串不是 Latin-1。但根据我的经验,Windows CP1252 被错误标记为 Latin-1 的情况很常见,拒绝所有这些代码点是相当徒劳的,除非您从另一个字符集转换为 Latin-1,并且想要严格执行什么操作。你输出。CP1252 也有一些未使用的字节,但数量不多。