use*_*351 2 python unicode utf-8
我正在尝试处理的一些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
Run Code Online (Sandbox Code Playgroud)
当我打印mystring时,我得到一张可爱的脸.但是当我打印出mystring的长度时,我得到2.
顺便说一句,我试图解决这个问题的原因是我需要在字符串中处理4个字节的字符,这样我就可以推送到5.5之前的MySQL数据库(它只能处理3个字节的UTF-8).
我很感激为什么Python似乎将其识别为两个字符,以及如何检测UTF-8字符串中的4字节字符.
谢谢.
您正在使用的Python版本尚未正确计算U + FFFF以上的字符数.其他一些语言(JAVA,JavaScript)表现得那样(你可以认为是一个bug),较新版本的Python会正确地将其视为一个字符.
识别4字节字符很容易,4的第一个字节始终是形式11110xxx(因此所有值都在range(0xf0, 0xf8)).它们代表U + FFFF之上的所有代码点.
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |