使用内联脚本时,在Python中将unicode字符打印到控制台的正确方法

时间:2015-03-28 10:35:23

标签: python unicode encoding utf-8 console

我正在寻找一种方法,使用Python 2.x的print方法将unicode字符打印到支持UTF-8的Linux控制台。

我得到的是:

$ python2.7 -c "print u'é'"
é

我想要的是什么:

$ python2.7 -c "print u'é'"
é

Python正确检测到控制台已配置为UTF-8。

$ python2.7 -c "import sys; print sys.stdout.encoding"
UTF-8

我查看了11741574,但建议的解决方案使用sys.stdout,而我正在寻找使用print的解决方案。

我还查看了5203105,但使用encode方法无法解决任何问题。

$ python -c "print u'é'.encode('utf8')"
é

正如@KlausD所建议的那样。和@itzmeontv

$ python2.7 -c "print 'é'"
é

正如@ PM2Ring所建议的

$ python -c "# coding=utf-8
> print u'é'"
é

请参阅接受的答案,了解有关问题原因的解释。

3 个答案:

答案 0 :(得分:2)

问题是没有打印到控制台,问题是从命令行解释-c参数:

$ python -c "print repr('é')"
'\xc3\xa9' # OK, expected byte string
$ python -c "print repr('é'.decode('utf-8'))"
u'\xe9' # OK, byte string decoded explicitly
$ python -c "print repr(u'é')"
u'\xc3\xa9' # bad, decoded implicitly as iso-8859-1

似乎问题是Python不知道编码命令行参数正在使用什么,因此您会遇到与源代码文件编码错误相同的问题。在这种情况下,你会告诉Python对coding注释使用的源代码的编码,你也可以在这里做:

$ python -c "# coding=utf-8
print repr(u'é')"
u'\xe9'

通常我会尝试在命令行上避免使用Unicode,特别是如果你可能不得不在故事情况更糟的Windows上运行。

答案 1 :(得分:1)

由于bobince提到的问题,这很难看。

但是你可以通过告诉Python你从控制台传入的角色实际上是用iso-8859-1又名latin-1进行编码来获得你想要的东西。

$ python -c "s=u'é';print unicode(s.encode('iso-8859-1'), 'utf-8')"
é

$ python -c "s=u'é';print unicode(s.encode('latin-1'), 'utf-8')"
é

答案 2 :(得分:0)

如果要在控制台中打印

,请尝试此操作
python -c "print 'é'"

é