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

Proper way to print unicode characters to the console in Python when using inline scripts

我正在寻找一种使用 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'é'"
é

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

如果你想在控制台中打印,试试这个

python -c "print 'é'"

é

问题不是打印到控制台,问题是从命令行解释 -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 不知道命令行参数使用的是什么编码,所以您遇到的问题与源代码文件的编码错误一样。在这种情况下,您可以通过 coding 注释告诉 Python 源使用的编码方式,您也可以在这里这样做:

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

一般来说,我会尽量避免在命令行上使用 Unicode,尤其是当您可能不得不在 Windows 上 运行 时,情况更糟。

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

但是您可以通过告诉 Python 您从控制台传入的字符实际编码为 iso-8859-1 也就是 latin-1.[=13= 来获得您想要的结果]

$ 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')"
é