在我编写的 Python 程序中,我需要打印 ©(版权)符号。有简单的方法吗?或者 Python 不支持它?
u"..."
而不是"..."
,并且您必须使用unichr
而不是chr
,但除此之外,一切都相同。)
U
和8个数字。'\N{COPYRIGHT SIGN}'
:使用Unicode实体名称转义序列。
COPYRIGHT SIGN
显然比00a9
更可读。unicodedata.lookup('COPYRIGHT SIGN')
或chr(0xa9)
将返回与上面的字面值相同的字符串。但实际上没有理由不使用字面值。unicodedata
文档,其中包含到适当版本的Unicode字符数据库的链接。(例如,在3.3.0中为6.1.0,在2.7.3中为5.2.0等)。您将需要通过一些链接来获取实际列表,但这是确保得到与Python编译成的内容完全相同的唯一方法。(如果您不关心这一点,那么您可以直接在谷歌上搜索,或者使用维基百科或计算机的字符查看器。)>>> print u"\u00a9"
©
>>> print u"\N{COPYRIGHT SIGN}"
©
>>> print("\u00a9")
©
>>> print("\N{COPYRIGHT SIGN}")
©
>>> print("©")
©
u"..."
)来告诉Python它是一个Unicode字符串。然而,在Python 3中,所有字符串都是Unicode字符串,所以您不需要(实际上在3.0-3.2中不允许)在字符串前加上u。u
的。当然,它并没有什么影响,但对于编写既适用于2.6-2.7又适用于3.2+的代码非常方便。 - abarnertprint("©")
chr(169)
(或者更好的选择是chr(0xa9)
)不是UTF-8,而是Unicode字符#169。假设你正在使用3.x版本,考虑到你之前的评论和你使用 print
作为函数,我认为你指的是Python 3.x版本。 - abarnertchr(169)
不会返回一个UTF-8字符串。它返回一个Unicode字符串,其底层编码可以是明确的UTF-16或-32(3.0-3.2),或者是未指定的实现细节(3.3),而不是UTF-8。2. 十六进制可能更好,因为任何给出©
字符编号的参考资料、帮助页面等都会以十六进制形式给出,例如U+00A9。因此,您(和您的读者)将不必来回转换。3. 您没有阅读括号中的注释吗?我明确表示假设您使用的是3.x,因为您在上一条评论中说了3.2。 - abarnert版权标志是一种Unicode字符。如果您的终端支持包含此字符的字符编码(例如utf-8或cp1252),则可以打印它:
这取决于Python检测终端字符编码:
In [64]: print(u'\N{COPYRIGHT SIGN}')
©
这里使用了显式编码(因为我的终端设置为使用utf-8字符编码,所以能够正常工作):
In [65]: print(u'\N{COPYRIGHT SIGN}'.encode('utf-8'))
©
\(
和\)
恰好不是转义序列的事实。 - abarnert