打印家庭表情符号,使用U+200D零宽拼接器,直接,VS通过列表 [英] Printing family emoji, with U+200D zero-width joiner, directly, vs via list

查看:0
本文介绍了打印家庭表情符号,使用U+200D零宽拼接器,直接,VS通过列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我发现在通过print直接打印带有家庭表情的字符串时,以及在列表中打印时,存在一些意想不到的差异。以下程序

family = '👨‍👩‍👧‍👧'
print(family)
print([family])

输出

👨‍👩‍👧‍👧
['👨u200d👩u200d👧u200d👧']

我希望它输出的时间

👨‍👩‍👧‍👧
['👨‍👩‍👧‍👧']

多字符字形的另一种情况

man_with_skin_tone_modifier = '👨🏿'
print(man_with_skin_tone_modifier)
print([man_with_skin_tone_modifier])

输出如我所料:

👨🏿
['👨🏿']

为什么?


上下文:我在写https://stackoverflow.com/a/49930688/1319998的答案时发现了这一点,它在OS X上使用的是Python3.6.5。

unicode

如注释中所示,区别在于print(family)调用str.__str__方法,而print([family])调用str.__repr__str.__repr__转义不可打印的推荐答案字符。

  1. print函数使用str转换其(非关键字)参数。

  2. 在容器上调用str对其项调用repr。这主要是因为容器内的字符串太容易干扰容器本身的表示(例如,用换行符)。在发布了quickly rejected.

  3. 之前,已经提出了一项旨在改变这一点的PEP
  4. 对字符串调用repr可转义任何不可打印的字符(但从Python3开始,将保留其他非ASCII Unicode字符):请参阅PEP-3138str.isprintable的说明

如果字符串中的所有字符都可打印或字符串为空,则返回TRUE,否则返回FALSE。不可打印字符是那些在Unicode字符数据库中定义为"Other"或"Separator"的字符,但ASCII空格(0x20)除外,它被认为是可打印的。(请注意,此上下文中的可打印字符是那些在字符串上调用epr()时不应转义的字符。它与写入sys.stdout或sys.stderr的字符串的处理无关。)

CPython实现可以找到here(搜索unicode_epr函数)。

这篇关于打印家庭表情符号,使用U+200D零宽拼接器,直接,VS通过列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆