如何在Python中打印Unicode字符?

Noo*_*one 105 python python-unicode

我想写一本字典,英文单词指向俄语和法语翻译.

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

Mat*_*all 95

要在Python源代码中包含Unicode字符,可以在字符串中使用表单中的Unicode转义字符\u0123,并在字符串文字前面加上"u".

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

>>> print u'\u0420\u043e\u0441\u0441\u0438\u044f'
??????
Run Code Online (Sandbox Code Playgroud)

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

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

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

从Python中的文件读取字符

  • 是的,你_can_用Unicode编码的文本文件编写代码,但许多编辑器和工具在处理它们时遇到了麻烦.我在许多不同平台上使用源代码的经验是,最好将源代码保存为ASCII并使用Unicode转义. (4认同)
  • @MattRyall,我同意,但俄罗斯开发者团队可能想用俄语撰写评论和文档字符串.对于语言项目来说,这是一个不错的选择. (3认同)
  • 虽然请注意,这仅在您打印字符串时才有效.如果它被包裹在其他对象中,您将看到转义码.例如,尝试"打印[u'\ u0420\u043e\u0441\u0441\u0441\u0444\u044f']". (3认同)
  • 如果我将它存储在一个字符串`mystr`中怎么办?那怎么打印呢? (3认同)

Eri*_*ski 44

在Python中打印unicode字符:

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

el@apollo:~$ python
Python 2.7.3
>>> print u'\u2713'
?
Run Code Online (Sandbox Code Playgroud)

Unicode字符u'\u2713'是一个复选标记.解释器在屏幕上打印复选标记.

从python脚本中打印unicode字符:

把它放在test.py中:

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

像这样运行:

el@apollo:~$ python test.py
here is your checkmark: ?
Run Code Online (Sandbox Code Playgroud)

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

将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: é')
Run Code Online (Sandbox Code Playgroud)

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

python foo.py > tmp.txt
Run Code Online (Sandbox Code Playgroud)

打开tmp.txt并查看内部,你会看到:

el@apollo:~$ cat tmp.txt 
e with obfuscation: é
Run Code Online (Sandbox Code Playgroud)

因此,您已将带有模糊标记的unicode e保存到文件中.


Tom*_*ndt 34

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


Gor*_*bot 17

在Python 2,你声明Unicode字符串用u,如u"?"和使用decode(),并encode()分别转换为Unicode.

在Python 3中它更容易一些.可以在这里找到一个非常好的概述.那个演讲为我澄清了很多东西.


Eva*_*van 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')
Run Code Online (Sandbox Code Playgroud)

蟒蛇2:

print u'\u0420\u043e\u0441\u0441\u0438\u044f'
Run Code Online (Sandbox Code Playgroud)


小智 8

Python 支持\N命名 unicode 字符,如果您想让代码更具可读性,这会很方便。这是一个例子:

assert '\N{snake}' == ''
Run Code Online (Sandbox Code Playgroud)


She*_* S. 6

还有一件事尚未添加

\n\n

在 Python 2 中,如果您想打印具有 unicode 的变量并使用.format(),请执行以下操作(使正在格式化的基本字符串为 unicode 字符串:u\'\'

\n\n
>>> text = "Universit\xc3\xa9 de Montr\xc3\xa9al"\n>>> print(u"This is unicode: {}".format(text))\n>>> This is unicode: Universit\xc3\xa9 de Montr\xc3\xa9al\n
Run Code Online (Sandbox Code Playgroud)\n


bl3*_*0de 6

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

>>> print("Learning : ", "\U0001F40D")
Learning :  
>>> 
Run Code Online (Sandbox Code Playgroud)

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