我想制作一本字典,其中英语单词指向俄语和法语的翻译。
如何在 Python 中打印出 unicode 字符?另外,如何将 unicode 字符存储在变量中?
我想制作一本字典,其中英语单词指向俄语和法语的翻译。
如何在 Python 中打印出 unicode 字符?另外,如何将 unicode 字符存储在变量中?
要在 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 解释器打印一个 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 保存到文件中。
如果您尝试使用print()
Unicode,并遇到 ascii 编解码器错误,请查看此页面,其 TLDR 是export PYTHONIOENCODING=UTF-8
在启动 python 之前完成的(此变量控制控制台尝试将您的字符串数据编码为的字节序列)。在内部,Python3 默认使用 UTF-8(参见Unicode HOWTO) 所以这不是问题;您可以将 Unicode 放入字符串中,如其他答案和评论中所示。当您尝试将这些数据发送到您的控制台时,问题就会发生。Python 认为你的控制台只能处理 ascii。其他一些答案说,“首先将其写入文件”,但请注意,他们为此指定了编码(UTF-8)(因此,Python 不会更改任何写入内容),然后使用读取方法只吐出字节而不考虑编码的文件,这就是它起作用的原因。
在 Python 2 中,您使用 , 声明 unicode 字符串u
,如 inu"猫"
和使用decode()
andencode()
分别转换为 unicode 和从 unicode 转换。
这在 Python 3 中要容易得多。可以在这里找到一个很好的概述。那个演讲为我澄清了很多事情。
考虑到这是 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'
将'+'替换为'000'。例如,'U+1F600'将变为'U0001F600'并在 Unicode 代码前加上“\”并打印。例子:
>>> print("Learning : ", "\U0001F40D")
Learning :
>>>
检查这个也许它会帮助 python unicode emoji
我在 Windows 中使用 Portable winpython,它包括 IPython QT 控制台,我可以实现以下。
>>>print ("結婚")
結婚
>>>print ("おはよう")
おはよう
>>>str = "結婚"
>>>print (str)
結婚
您的控制台解释器应支持 unicode 以显示 unicode 字符。
还有一件事尚未添加
在 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
这修复了 python 中的 UTF-8 打印:
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)