首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个程序(开放编码utf-8 utf-8-sig )在某些上下文中失败,而不是在其他上下文中失败

为什么这个程序(开放编码utf-8 utf-8-sig )在某些上下文中失败,而不是在其他上下文中失败
EN

Stack Overflow用户
提问于 2019-09-13 15:20:02
回答 1查看 139关注 0票数 0

为什么,使用这个程序:

代码语言:javascript
运行
复制
import sys

print("sys.getdefaultencoding()='%s'" % (sys.getdefaultencoding(), ))

with open("example.txt", "w", encoding="utf-8-sig", errors="replace") as f:
    f.write("test;Ilość sztuk\n")

with open("example.txt", "r", errors="strict") as rf:
    lr = rf.readline()
    print("lr=", lr)

在某些上下文中运行正常,在其他上下文中运行失败。

示例OK:

代码语言:javascript
运行
复制
$ python3 ./example.py 
sys.getdefaultencoding()='utf-8'
lr= test;Ilość sztuk

注意:

代码语言:javascript
运行
复制
$ python3 --version
Python 3.6.8

示例KO:

代码语言:javascript
运行
复制
sys.getdefaultencoding()='utf-8'
Traceback (most recent call last):
  File "./example.py", line 9, in <module>
    lr = rf.readline()
  File "/.../python/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
$

注意:

代码语言:javascript
运行
复制
$ python3 --version
Python 3.6.8

上下文是;Ubuntu 19.04,Ubuntu 18.04,Debian 9,in chroot,on chroot,LANG是"en_US.UTF-8“或"fr_FR.UTF-8",对成功或失败没有影响

在所有情况下,Python都是使用相同选项手动安装。

如果你需要某个环境变量的值,我可以给你。

我搜索在所有情况下都有完全相同的执行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-14 04:08:29

在Python 3中,有不同的编码默认值。您找到的sys.getdefaultencoding()告诉您str.encode()bytes.decode()方法的默认值。据我所知,无论您使用什么版本或实现的Python,它都是UTF-8。

但是,如果在调用open()时省略了encoding=...参数,那么将使用locale.getdpreferredencoding();对于sys.stdin,也可以使用sys.stdout (print()!)和sys.stderr。此默认值取决于启动Python解释器的环境。关于如何确定此值的详细信息因平台而异,但通常您可以通过设置PYTHONIOENCODING环境变量来实现所需的行为。从Python3.7开始,您可以通过-X utf8启动Python来启用UTF-8模式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57919011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档