如何使用 Python 打印 Unicode字符?

我想做一本英语词汇指向俄语和法语翻译的词典。

如何在 Python 中打印 unicode 字符? 还有,如何在变量中存储 unicode 字符?

394604 次浏览

在 Python2中,使用 u声明 unicode 字符串,如 u"猫",并分别使用 decode()encode()来翻译 unicode 和从 unicode 翻译 Unicode。

在 Python 3中要容易得多。一个非常好的概述可以找到 给你。那次演讲为我澄清了很多事情。

要在 Python 源代码中包含 Unicode 字符,可以在字符串中以 \u0123的形式使用 Unicode 转义字符。在 Python 2.x 中,还需要在字符串文本前加上“ u”的前缀。

下面是在 Python 2.x 交互控制台中运行的一个示例:

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

在 Python2中,在字符串前面加上“ u”将它们声明为 Unicode 类型的变量,如 Python Unicode 文档中所述。

在 Python 3中,“ u”前缀现在是可选的:

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

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

这些示例使用 Unicode 转义符(\u...) ,它允许您打印 Unicode 字符,同时将源代码保持为纯 ASCII。这对在不同系统上使用相同的源代码有所帮助。如果您确信所有系统都能正确处理 Unicode 文件,那么还可以在 Python 源代码中直接使用 Unicode 字符(例如 Python 2中的 print u'Россия')。

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

用 Python 从文件中读取字符

用 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 保存到了一个文件中。

我在 Windows 中使用便携式 winpython,它包含 IPython QT 控制台,我可以实现以下功能。

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


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


>>>str = "結婚"




>>>print (str)
結婚

控制台解释器应该支持 unicode,以便显示 unicode 字符。

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

还有一件事没有加进去

在 Python 2中,如果希望打印具有 unicode 的变量并使用 .format(),那么可以这样做(使用 u''格式化基本字符串为 unicode 字符串:

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

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

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

考虑到这是 google 搜索这个主题时出现的第一个堆栈溢出结果,值得一提的是,在 Python 3中,将 u前缀加到 unicode 字符串是可选的。(Python 2示例是从顶部答案中复制的)

Python 3(两种工作) :

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

巨蟒2:

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

'+'替换为 ’000’。例如,U + 1 F600将成为 U0001F600并用 预置 Unicode 代码并打印。 例如:

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

看看这个,也许会有帮助 巨蟒 Unicode 表情符号

Python 支持将 \N作为一个命名的 unicode 字符,如果您希望使代码更具可读性,这非常方便。这里有一个例子:

assert '\N{snake}' == '🐍'