如何在Python中打印Unicode字符?


Answers:


109

要在Python源代码中包含Unicode字符,可以在字符串的形式中使用Unicode转义字符\u0123,并在字符串文字前加上'u'前缀。

这是在Python交互式控制台中运行的示例:

>>> print u'\u0420\u043e\u0441\u0441\u0438\u044f'
Россия

Python Unicode文档中所述,这样声明的字符串是Unicode类型的变量。

如果运行上述命令不能正确显示文本,则可能是您的终端无法显示Unicode字符。

有关从文件读取Unicode数据的信息,请参见以下答案:

使用Python从文件中读取字符


4
是的,您可以将代码编写为Unicode编码的文本文件,但是许多编辑器和工具都很难处理它们。我在许多不同平台上使用源代码的经验是,最好将源代码保留为ASCII并使用Unicode转义。
马特·赖尔

3
@MattRyall,我同意,但是一组俄罗斯开发人员可能想用俄语写注释和文档字符串。对于语言项目,这是一个不错的选择。
约翰·伦德伯格

3
但是请注意,这仅在仅打印字符串时有效。如果将其包装在其他对象中,则会看到转义码。例如,尝试“打印[u'\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']”。
btubbs

3
如果将其存储在字符串中mystr怎么办?那怎么打印呢?
cqcn1991

1
@CarloWood 最佳答案将 告诉您您到底想要什么。Justprint your_unicode_characters.encode('utf-8')
Zhang Yuhao

48

在Python中打印unicode字符:

直接从python解释器打印unicode字符:

el@apollo:~$ python
Python 2.7.3
>>> print u'\u2713'

Unicode字符u'\u2713'是一个复选标记。口译员将复选标记打印在屏幕上。

从python脚本打印unicode字符:

把它放在test.py中:

#!/usr/bin/python
print("here is your checkmark: " + u'\u2713');

像这样运行它:

el@apollo:~$ python test.py
here is your checkmark: 

如果没有为您显示复选标记,则问题可能出在其他地方,例如终端设置或您正在使用流重定向进行的操作。

将unicode字符存储在文件中:

将此保存到文件:foo.py:

#!/usr/bin/python -tt
# -*- coding: utf-8 -*-
import codecs
import sys 
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
print(u'e with obfuscation: é')

运行它,并将输出管道传输到文件:

python foo.py > tmp.txt

打开tmp.txt并查看内部,您会看到以下内容:

el@apollo:~$ cat tmp.txt 
e with obfuscation: é

因此,您已将带有混淆标记的unicode e保存到文件中。


@ ofer.sheffer很奇怪,我在这里想解决相反的问题,关键是可能需要摆弄一些东西。
克里斯H

40

如果您尝试使用print()Unicode并出现ascii编解码器错误,请查看此页面该页面的TLDR export PYTHONIOENCODING=UTF-8在启动python之前执行(此变量控制控制台尝试将字节数据编码为的字节序列)。在内部,Python3默认使用UTF-8(请参阅Unicode HOWTO),所以这不是问题;您可以将Unicode放入字符串中,如其他答案和注释所示。当您尝试将这些数据发送到控制台时,就会发生问题。Python认为您的控制台只能处理ascii。其他一些答案说:“首先将其写入文件”,但请注意,它们为此指定了编码(UTF-8)(因此,Python不会在书写上进行任何更改),然后使用一种读取方法该文件仅散出字节而无需考虑编码,因此起作用。


谢谢!使用asciitree包将结果写入文件时,出现了unicde问题。这为我解决了。
帕尔Thingbø

非常感谢。花了几个小时在谷歌上搜索,很高兴我发现了这个。
CharlyDelta '18年

17

在Python 2中,您u可以在中u"猫"使用声明unicode字符串,并分别使用decode()encode()与unicode进行相互转换。

在Python 3中,这要容易得多。在这里可以找到非常好的概述。那场演讲为我澄清了很多事情。


1
视频链接的Thx。这是非常有用的。
2015年

1
也可以通过以下非视频方式获得:实用Unicode,或者,如何停止这种痛苦?(Pycon2012)nedbatchelder.com/text/unipain.html
汤姆·洪特

7

考虑到这是Google搜索此主题时的第一个堆栈溢出结果,因此值得一提的u是,在python 3中Unicode字符串的前缀是可选的。(从最上面的答案复制了Python 2示例)

Python 3(两者均可):

print('\u0420\u043e\u0441\u0441\u0438\u044f')
print(u'\u0420\u043e\u0441\u0441\u0438\u044f')

Python 2:

print u'\u0420\u043e\u0441\u0441\u0438\u044f'

谢谢!正是我搜索的内容:一种在python2和python3的字符串内打印unicode字符的通用方法。
JenyaKh,

固定版本也可以在Phyton 2中使用-可以选择使用固定夹,因此可以使用。
亚历山大·斯托尔

4

我在Windows中使用Portable Winpython,它包含IPython QT控制台,我可以实现以下目标。

>>>print ("結婚")
結婚

>>>print ("おはよう")
おはよう

>>>str = "結婚"


>>>print (str)
結婚

您的控制台解释器应支持unicode才能显示unicode字符。


3

尚未添加的一件事

在Python 2中,如果要打印具有unicode并使用的变量,.format()请执行此操作(将要格式化的基本字符串设置为u''

>>> text = "Université de Montréal"
>>> print(u"This is unicode: {}".format(text))
>>> This is unicode: Université de Montréal

3

这修复了python中的UTF-8打印:

UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)

1

'+'替换为'000'。例如,“ U + 1F600”将变为“ U0001F600”,并在Unicode代码前添加“ \”并打印。例:

>>> print("Learning : ", "\U0001F40D")
Learning :  🐍
>>> 

检查这也许会帮助 python unicode emoji

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.