【问题标题】:How to display special characters in Python with print如何在 Python 中使用 print 显示特殊字符
【发布时间】:2013-02-12 16:15:40
【问题描述】:

在我正在编写的 Python 程序中,我需要打印 ©(版权)符号。是否有捷径可寻?还是 Python 不支持它?这是一个例子。

print ("\(copyright symbol here\)") 

只是一个非常简单的问题。谢谢!

【问题讨论】:

  • 附带说明:你真的想要那些反斜杠吗?如果是这样,最好将它们显式加倍,或者使用原始字符串,而不是依赖于 \(\) 恰好不是转义序列这一事实。
  • 嗯...只使用一个反斜杠对我来说总是可以打印引号和括号。不过感谢您的建议。

标签: python printing


【解决方案1】:

在 Python 中,您可以通过三种方式将 Unicode 字符放入字符串中。 (如果您使用 2.x 而不是 3.x,则使用 Unicode 字符串更简单——如在 u"…" 中而不是 "…" 中——你必须使用 unichr 而不是 chr,否则一切都是一样的。)

  • '©':直接输入。
    • 这意味着您可能必须为源代码选择一种字符编码,例如,将文件显式保存为 UTF-8,并在其顶部放置一个编码头。 (对于 3.3,UTF-8 是默认设置,因此如果您使用的是编码标头,则不需要。)
    • 在 Mac OS X 下,在大多数语言的默认键盘设置中,这是 opt-G。
    • 在 Windows 下,我相信你可以使用 0169 的 alt-numeric-keypad 技巧来输入它,虽然这看起来并不容易。
    • 如果您不知道如何用键盘输入“©”,请从其他地方复制并粘贴(谷歌“版权标志”,您应该会找到一个可以复制的页面,或者就此而言,对从这里)。
    • 或者,您的计算机可能有一个字符查看器或类似的工具,可让您指向并单击特殊字符。
  • '\u00a9':使用 Unicode 数字转义序列。
    • Google 搜索“unicode 版权标志”,您很快就会看到它是 U+00A9。在 Python 中,就是 `'\u00a9'。
    • 对于基本多语言平面之外的任何内容(即超过 4 个十六进制数字),请使用大写字母 U 和 8 个数字。
  • '\N{COPYRIGHT SIGN}':使用 Unicode 实体名称转义序列。
    • 同样,您可能需要通过 Google 搜索实体的正确名称。
    • 没有完整记录可以使用和不能使用哪些名称。但它通常会在您期望的时候起作用,而且COPYRIGHT SIGN 显然比00a9 更具可读性。

你也可以间接地做一些事情——例如,unicodedata.lookup('COPYRIGHT SIGN')chr(0xa9) 将返回与上述文字相同的字符串。但是真的没有理由不使用文字。

Python 文档中的Unicode HOWTO 对此有更多详细信息——如果您不愿意阅读全文,The String Type 描述了不同类型的转义序列(以及编码/解码之间的问题) unicode 和 bytes 字符串,在 2.x 中尤为重要),Unicode Literals in Python Source Code 描述了如何指定编码声明。

如果您想要一份可以使用的所有字符的官方列表,而不仅仅是在谷歌上搜索它们,请查看您的 Python 版本的 unicodedata 文档,其中包含指向相应版本的 Unicode 字符数据库的链接。 (例如,它是 3.3.0 中的 6.1.0,2.7.3 中的 5.2.0 等。)您必须浏览几个链接才能到达实际列表,但这是您唯一的方法得到一些可以保证完全是编译成 Python 的东西。 (而且,如果你不关心这个,你也可以用谷歌搜索它,或者使用维基百科或你电脑的字符查看器。)

【讨论】:

  • @LastTigerEyes:不要在现有答案上发布新问题作为 cmets。如果您有新问题,请创建一个新问题。您可以使用share 链接回此问题或答案,以获取可以粘贴到新问题中的 URL。但是请先搜索这个;将 Unicode 输出打印到 Windows cmd.exe 终端的问题已在此站点上被询问和回答数十次,如果不是数百次的话。
【解决方案2】:

在 python 2 中:

>>> print u"\u00a9"
©
>>> print u"\N{COPYRIGHT SIGN}"
©

在 python 3 中:

>>> print("\u00a9")
©
>>> print("\N{COPYRIGHT SIGN}")
©
>>> print("©")
©

在 python 2 中,你必须在字符串前面加上一个 u (u"...") 来告诉 python 它是一个 unicode 字符串。但是,在 python 3 中,所有字符串都是 unicode 字符串,因此您不必(实际上在 3.0-3.2 中也不允许)在字符串前面加上 u。

您可以在此处查看字符列表及其名称/Unicode 值:http://www.fileformat.info/info/charset/UTF-16/list.htm 并以与此处使用的版权符号相同的方式使用它们

【讨论】:

  • 实际上,在 Python 3.2 及更高版本中,您可以为字符串添加前缀u。 (当然它没有任何效果——但它对于编写适用于 2.6-2.7 和 3.2+ 的代码非常方便。)
  • 它被放回 3.3,但是是的,我应该注意,谢谢
【解决方案3】:

当然!输入版权符号:

print("©")

(Python 中没有字符实体,比如 HTML。)

【讨论】:

  • 我会指出,根据您所在的位置,版权符号在键盘上并不常见......
  • @Quirliom:在任何地方吗?我使用 Compose、O、C 键入它,但除此之外,字符映射可能是要走的路。
  • 你可以输入这个:print("\xa9")(在 python3.2 中)
  • @cIph3r:不,在 Python 3 中,chr(169)(或者,可能更好,chr(0xa9) 不是 UTF-8,它是 Unicode 字符 #169。(我假设你使用的是 3 .x,鉴于您之前的评论以及您使用 print 作为函数的事实,您指的是 3.x。)
  • @cIph3r: 1. 但是chr(169) 不返回 UTF-8 字符串。它返回一个 Unicode 字符串,其基础编码要么是明确的 UTF-16 或 -32 (3.0-3.2),要么是未指定的实现细节 (3.3),而不是 UTF-8。 2. 十六进制可能更好,因为任何提供© 字符编号的参考、帮助页面等都会以十六进制形式提供给您,例如 U+00A9。所以你(和你的读者)不必来回转换。 3. 您是否没有阅读括号中的评论,我明确表示我假设您使用的是 3.x,因为您在之前的评论中说的是 3.2?
【解决方案4】:

版权标志是一个 unicode 字符。 如果您的终端支持包含该字符的字符编码(例如 utf-8 或 cp1252),则可以打印它:

这依赖于 Python 检测终端的字符编码:

In [64]: print(u'\N{COPYRIGHT SIGN}')
©

这使用显式编码(由于我的终端设置为使用 utf-8 字符编码,因此它恰好可以工作):

In [65]: print(u'\N{COPYRIGHT SIGN}'.encode('utf-8'))
©

【讨论】:

    【解决方案5】:
    print u"\u00A9"
    

    其中“\u00A9”是版权符号的 unicode 字符。

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2019-10-14
      相关资源
      最近更新 更多