腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
精选内容/技术社群/优惠产品,
尽在小程序
立即前往
首页
标签
sys
#
sys
关注
专栏文章
(216)
技术视频
(0)
互动问答
(7)
k8s环境缺少cpu.weight?
0
回答
linux
、
cpu
、
file
、
fs
、
sys
大神帮看一下?
0
回答
buffer
、
innodb
、
mysql
、
plugin
、
sys
为什么我们不应该在py脚本中使用sys.setdefaultencode(“utf-8”)?
2
回答
sys
、
脚本
萧雨牧歌
潜行者
TL;DR 答案是绝不可能(除非你真的知道自己在做什么) 9/10倍的解决方案可以通过正确理解编码/解码来解决。 1/10人有错误定义的地点或环境,需要设置: PYTHONIOENCODING="UTF-8" 在他们的环境中修复控制台打印问题。 是干什么的呢? sys.setdefaultencoding("utf-8")(为了避免重复使用)每当Python2.x需要将Unicode()转换为str()(反之亦然)时,就会更改默认的编码/解码,并且不会给出编码。即: str(u"\u20AC") unicode("€") "{}".format(u"\u20AC") 在Python2.x中,默认编码设置为ASCII,上述示例将失败: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) (我的控制台配置为UTF-8,所以"€" = '\xe2\x82\xac',因此在\xe2) 或 UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128) sys.setdefaultencoding("utf-8")将允许这些工作我,但不一定适用于不使用UTF-8的人。asci的默认设置确保编码的假设不被写入代码中。 控制台 sys.setdefaultencoding("utf-8")也有一个副作用,似乎修复sys.stdout.encoding,当将字符打印到控制台时使用。Python使用用户的地区(Linux/OSX/un)*(X)或代码页(Windows)设置此值。偶尔,用户的区域设置会中断,只需要PYTHONIOENCODING若要修复控制台编码。 例子: $ export LANG=en_GB.gibberish $ python >>> import sys >>> sys.stdout.encoding 'ANSI_X3.4-1968' >>> print u"\u20AC" Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128) >>> exit() $ PYTHONIOENCODING=UTF-8 python >>> import sys >>> sys.stdout.encoding 'UTF-8' >>> print u"\u20AC" € 有什么不好的sys.setdefaultencode(“utf-8”)? 16年来,人们一直在使用Python2.x进行开发,人们的理解是默认的编码是ASCII。UnicodeError已经编写了异常处理方法来处理字符串到Unicode的转换,这些字符串被发现包含非ASCII。 def welcome_message(byte_string): try: return u"%s runs your business" % byte_string except UnicodeError: return u"%s runs your business" % unicode(byte_string, encoding=detect_encoding(byte_string)) print(welcome_message(u"Angstrom (Å®)".encode("latin-1")) 在设置默认编码之前,这段代码将无法解码ascii编码中的“oi”,然后输入异常处理程序来猜测编码并正确地将其转换为Unicode。印刷:Angstrom。®经营你的生意。一旦将默认编码设置为utf-8,代码将发现字节_字符串可以被解释为utf-8,因此它会损坏数据并返回以下内容:Angstrom(Ů)运行您的业务...
展开详请
赞
0
收藏
0
评论
0
分享
TL;DR 答案是绝不可能(除非你真的知道自己在做什么) 9/10倍的解决方案可以通过正确理解编码/解码来解决。 1/10人有错误定义的地点或环境,需要设置: PYTHONIOENCODING="UTF-8" 在他们的环境中修复控制台打印问题。 是干什么的呢? sys.setdefaultencoding("utf-8")(为了避免重复使用)每当Python2.x需要将Unicode()转换为str()(反之亦然)时,就会更改默认的编码/解码,并且不会给出编码。即: str(u"\u20AC") unicode("€") "{}".format(u"\u20AC") 在Python2.x中,默认编码设置为ASCII,上述示例将失败: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) (我的控制台配置为UTF-8,所以"€" = '\xe2\x82\xac',因此在\xe2) 或 UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128) sys.setdefaultencoding("utf-8")将允许这些工作我,但不一定适用于不使用UTF-8的人。asci的默认设置确保编码的假设不被写入代码中。 控制台 sys.setdefaultencoding("utf-8")也有一个副作用,似乎修复sys.stdout.encoding,当将字符打印到控制台时使用。Python使用用户的地区(Linux/OSX/un)*(X)或代码页(Windows)设置此值。偶尔,用户的区域设置会中断,只需要PYTHONIOENCODING若要修复控制台编码。 例子: $ export LANG=en_GB.gibberish $ python >>> import sys >>> sys.stdout.encoding 'ANSI_X3.4-1968' >>> print u"\u20AC" Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128) >>> exit() $ PYTHONIOENCODING=UTF-8 python >>> import sys >>> sys.stdout.encoding 'UTF-8' >>> print u"\u20AC" € 有什么不好的sys.setdefaultencode(“utf-8”)? 16年来,人们一直在使用Python2.x进行开发,人们的理解是默认的编码是ASCII。UnicodeError已经编写了异常处理方法来处理字符串到Unicode的转换,这些字符串被发现包含非ASCII。 def welcome_message(byte_string): try: return u"%s runs your business" % byte_string except UnicodeError: return u"%s runs your business" % unicode(byte_string, encoding=detect_encoding(byte_string)) print(welcome_message(u"Angstrom (Å®)".encode("latin-1")) 在设置默认编码之前,这段代码将无法解码ascii编码中的“oi”,然后输入异常处理程序来猜测编码并正确地将其转换为Unicode。印刷:Angstrom。®经营你的生意。一旦将默认编码设置为utf-8,代码将发现字节_字符串可以被解释为utf-8,因此它会损坏数据并返回以下内容:Angstrom(Ů)运行您的业务
禁用输出缓冲?
2
回答
stdout
、
sys
、
编程
、
对象
、
命令行
心愿
是的。 你可以通过“-u”开关在命令行上禁用它。 或者,你可以在每次写入时在sys.stdout上调用.flush()(或者用自动执行此操作的对象包装它)...
展开详请
赞
0
收藏
0
评论
0
分享
是的。 你可以通过“-u”开关在命令行上禁用它。 或者,你可以在每次写入时在sys.stdout上调用.flush()(或者用自动执行此操作的对象包装它)
热门
专栏
python3
11.9K 文章
239 订阅
全志嵌入式那些事
453 文章
33 订阅
sktj
1.5K 文章
34 订阅
linux驱动个人学习
724 文章
183 订阅
小麦苗的DB宝专栏
927 文章
104 订阅
热门
标签
更多标签
ICP备案
云服务器
对象存储
云点播
即时通信 IM
实时音视频
DNS 解析 DNSPod
内容分发网络 CDN
人脸识别
私有网络
python
java
javascript
人工智能
android
领券