152

我想制作一本字典,其中英语单词指向俄语和法语的翻译。

如何在 Python 中打印出 unicode 字符?另外,如何将 unicode 字符存储在变量中?

4

9 回答 9

143

要在 Python 源代码中包含 Unicode 字符,您可以在字符串的表单中使用Unicode 转义字符\u0123。在 Python 2.x 中,您还需要在字符串文字前加上 'u' 前缀。

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

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

在 Python 2 中,以 'u' 为前缀的字符串将它们声明为 Unicode 类型变量,如Python Unicode 文档中所述。

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

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

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

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

有关从文件中读取 Unicode 数据的信息,请参阅此答案:

在 Python 中从文件中读取字符

于 2012-05-13T05:10:04.833 回答
49

在 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 保存到文件中。

于 2013-12-07T23:20:41.653 回答
45

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

于 2017-05-15T21:36:20.803 回答
20

在 Python 2 中,您使用 , 声明 unicode 字符串u,如 inu"猫"和使用decode()andencode()分别转换为 unicode 和从 unicode 转换。

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

于 2012-05-13T05:07:50.310 回答
8

考虑到这是 google 搜索该主题时的第一个堆栈溢出结果,值得一提的u是,在 Python 3 中为 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'
于 2019-05-11T16:22:46.573 回答
7

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

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

检查这个也许它会帮助 python unicode emoji

于 2020-08-02T08:28:10.153 回答
4

我在 Windows 中使用 Portable winpython,它包括 IPython QT 控制台,我可以实现以下。

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

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

>>>str = "結婚"


>>>print (str)
結婚

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

于 2014-11-18T23:01:47.493 回答
4

还有一件事尚未添加

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

>>> text = "Université de Montréal"
>>> print(u"This is unicode: {}".format(text))
>>> This is unicode: Université de Montréal
于 2018-08-29T01:38:04.507 回答
3

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

UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
于 2018-10-08T10:58:13.487 回答