打印家庭表情符号,使用U+200D零宽拼接器,直接,VS通过列表 [英] Printing family emoji, with U+200D zero-width joiner, directly, vs via list
本文介绍了打印家庭表情符号,使用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__
转义不可打印的推荐答案字符。
print
函数使用str
转换其(非关键字)参数。在容器上调用
str
对其项调用repr
。这主要是因为容器内的字符串太容易干扰容器本身的表示(例如,用换行符)。在发布了quickly rejected. 之前,已经提出了一项旨在改变这一点的PEP
对字符串调用
repr
可转义任何不可打印的字符(但从Python3开始,将保留其他非ASCII Unicode字符):请参阅PEP-3138和str.isprintable的说明
如果字符串中的所有字符都可打印或字符串为空,则返回TRUE,否则返回FALSE。不可打印字符是那些在Unicode字符数据库中定义为"Other"或"Separator"的字符,但ASCII空格(0x20)除外,它被认为是可打印的。(请注意,此上下文中的可打印字符是那些在字符串上调用epr()时不应转义的字符。它与写入sys.stdout或sys.stderr的字符串的处理无关。)
CPython实现可以找到here(搜索unicode_epr函数)。
这篇关于打印家庭表情符号,使用U+200D零宽拼接器,直接,VS通过列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文