python2 如何正确的处理 4 字节的字符,为什么一个字符变成了两个?

x = u'\U0001f604abc'

print('length:',len(x))
for i in x:
    print(i)

得到输出:

('length:', 5)
�
�
a
b
c

x 是 4 个字符,其中第一个是 4 字节字符,一个笑脸表情的 unicdoe 码,现在显然被拆分成了两个。我写的过滤函数就过滤失败了:

def filter_invalid_str(text):
    return ''.join(map(lambda x: x if u'\u0000' < x < u'\uFFFF' else '_', text))

所以,明明一个字符为什么变成了两个,如何当作一个字符处理?

阅读 4.2k
1 个回答

segfault.png

我这里是4个字节,第一个笑脸,后面是3个字母a,b,c,机器是ubuntu14.04 64位,python2.7.6。题主是在什么环境下操作的?
笑脸打印不出来,而且长度也不对,估计跟你的操作环境有关,试试把控制台的编码方式设置为unicode

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题