我正在寻找一种方法,使用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'é'"
é
请参阅接受的答案,了解有关问题原因的解释。
答案 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 'é'"
é