使用内联脚本时在 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')"
é
我正在寻找一种使用 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')"
é