gpt4 book ai didi

c - 我如何确定这是 latin1 还是 utf8?

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:57 25 4
gpt4 key购买 nike

我在 latin1 表中有一个字符串“Artîsté”。我使用 C mysql 连接器从表中获取字符串。我将 character_set_connection 设置为 utf8。

在调试器中它看起来像:

"Art\xeest\xe9"

如果我用 printf ("%02X", (unsigned char) a[i]); 打印十六进制值对于我得到的每个字符

41 72 74 EE 73 74 E9

我怎么知道它是 utf8 还是 latin1?

最佳答案

\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 也有一些未使用的字节,但没有那么多。

关于c - 我如何确定这是 latin1 还是 utf8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8595761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com