我想做一本英语词汇指向俄语和法语翻译的词典。
如何在 Python 中打印 unicode 字符? 还有,如何在变量中存储 unicode 字符?
在 Python2中,使用 u声明 unicode 字符串,如 u"猫",并分别使用 decode()和 encode()来翻译 unicode 和从 unicode 翻译 Unicode。
u
u"猫"
decode()
encode()
在 Python 3中要容易得多。一个非常好的概述可以找到 给你。那次演讲为我澄清了很多事情。
要在 Python 源代码中包含 Unicode 字符,可以在字符串中以 \u0123的形式使用 Unicode 转义字符。在 Python 2.x 中,还需要在字符串文本前加上“ u”的前缀。
\u0123
下面是在 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'Россия')。
\u...
print u'Россия'
有关从文件读取 Unicode 数据的信息,请参见下面的答案:
用 Python 从文件中读取字符
直接从 python 解释器打印 Unicode字符:
el@apollo:~$ python Python 2.7.3 >>> print u'\u2713' ✓
Unicode字符 u'\u2713'是一个复选标记,解释器会将该复选标记打印到屏幕上。
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 不会改变任何书面内容) ,然后使用一种方法读取文件,只是吐出字节而不考虑编码,这就是为什么这样做的原因。
print()
export PYTHONIOENCODING=UTF-8
还有一件事没有加进去
在 Python 2中,如果希望打印具有 unicode 的变量并使用 .format(),那么可以这样做(使用 u''格式化基本字符串为 unicode 字符串:
.format()
u''
>>> 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 字符,如果您希望使代码更具可读性,这非常方便。这里有一个例子:
\N
assert '\N{snake}' == '🐍'