栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python <3中将UTF-8编码的文本打印到控制台?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python <3中将UTF-8编码的文本打印到控制台?

如何在Python <3中将UTF-8编码的文本打印到控制台?

print u"some unipre text N{EURO SIGN}"print b"some utf-8 enpred bytestring xe2x82xac".depre('utf-8')

即,如果您有Unipre字符串,则直接打印。如果您有一个字节串,请先将其转换为Unipre。

您的语言环境设置(

LANG
LC_CTYPE
)表示utf-8语言环境,因此(理论上)您可以直接打印utf-8字节串,并且应该在终端中正确显示(如果终端设置与语言环境设置一致,则应),但您应避免这种情况:
不要在脚本中对环境字符编码进行硬编码 而是直接打印Unipre

您的问题中有许多错误的假设。

您无需设置

PYTHONIOENCODING
区域设置即可将Unipre打印到终端。utf-8语言环境支持所有Unipre字符,即按原样工作。

您不需要解决方法

sys.stdout =precs.getwriter(locale.getpreferredencoding())(sys.stdout)
。如果某些代码(您无法控制)确实需要打印字节,则可能会中断,并且/或者在将Unipre打印到Windows控制台时可能会中断
(错误的代码页,无法打印无法解码的字符)。正确的语言环境设置和/或
PYTHONIOENCODING
envvar就足够了。另外,如果你需要更换
sys.stdout
,然后用
io.TextIOWrapper()
替代
precs
模块像
win-unipre-console
包一样。

sys.getdefaultencoding()
与您的语言环境设置和无关
PYTHONIOENCODING
。您认为
PYTHONIOENCODING

应该更改设置的假设
sys.getdefaultencoding()
是不正确的。您应该检查一下
sys.stdout.encoding

sys.getdefaultencoding()
打印到控制台时不使用。如果将stdout重定向到文件/管道,除非
PYTHOHIOENCODING
已设置,否则它可用作Python
2的后备:

$ python2 -c'import sys; print(sys.stdout.encoding)'UTF-8$ python2 -c'import sys; print(sys.stdout.encoding)' | catNone$ PYTHonIOENCODING=utf8 python2 -c'import sys; print(sys.stdout.encoding)' | catutf8

不要打电话

sys.setdefaultencoding("UTF-8")
; 它可能会 无声地
破坏您的数据和/或破坏不期望的第三方模块。请记住
sys.getdefaultencoding()
,用于在Python 2中 隐式
地将字节串(
str
)转换为/来回转换,例如 。另请参阅
@mesilliac的答案中的引号。
unipre

__
"a" + u"b"



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516980.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号