gpt4 book ai didi

python - 为什么 Python 将这个 UTF-8 字符识别为两个字符而不是一个

转载 作者:行者123 更新时间:2023-11-28 20:41:45 24 4
gpt4 key购买 nike

我尝试处理的一些 UTF-8 文本有这个可爱的 4 字节字符:\xF0\x9F\x98\xA5

根据这个网站,它是“失望但如释重负的脸”:http://apps.timwhitlock.info/emoji/tables/unicode

在我看来,Python 将其视为两个单独的字符。

这是我的测试代码:

mystring = '\xF0\x9F\x98\xA5'.decode('utf-8')

print len(mystring)

print mystring

print len(mystring.encode('utf-8'))

for c in mystring:
print c

当我打印 mystring 时,我得到一张可爱的脸。但是当我打印 mystring 的长度时,我得到 2。

顺便说一下,我尝试处理这个问题的原因是我需要处理字符串中的 4 字节字符,这样我就可以推送到 5.5 之前的 MySQL 数据库(它只能处理 3 字节的 UTF-8)。

如果能帮助我了解为什么 Python 似乎将其识别为两个字符,以及如何检测 UTF-8 字符串中的 4 字节字符,我将不胜感激。

谢谢。

最佳答案

您使用的 Python 版本还不能正确计算 U+FFFF 以上的字符。其他一些语言(JAVA、JavaScript)的行为与此类似(您可以认为这是一个错误),较新版本的 Python 会正确地将其视为一个字符。

识别 4 字节字符很容易,4 的第一个字节始终采用 11110xxx 形式(因此所有值都在 range(0xf0, 0xf8) 中)。它们代表了 U+FFFF 以上的所有码位。

关于python - 为什么 Python 将这个 UTF-8 字符识别为两个字符而不是一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32486478/

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