关于 Python 读取文件时候的编码

2018-05-29 21:50:02 +08:00
 meowoo
今天在一个镜像机上安装 python3

安完之后测试的时候一直报不能用 ascii 解码的错误

然后 sys.getfilesystemencoding()的结果是 ascii

问下这个跟机器的编码有关么。也没找到怎么修改
2509 次点击
所在节点    Python
10 条回复
crb912
2018-05-29 22:26:14 +08:00
说了半天,上代码和文件的内容啊?

试试:
f = open(r'yourFilePath', encoding='某某编码')

如果报 某某编码 can't decde at xx position...
说明文件就不是那个编码。更准确的说,文件中可能使用了其它的编码的字符或符号。

最好的办法,就是用二进制查看工具看下。对于 ASCII,看下是否有超过 127(也就是 16 进制:EF)的,如果有,说明就不是纯 ASCII。

我猜测是这种可能性比较大。

或者文件给我发一份。
F1024
2018-05-29 22:29:21 +08:00
读取的时候加上编码类型不就行了。
bearqq
2018-05-29 22:32:31 +08:00
文件相关用 codecs 库,不要直接 open
meowoo
2018-05-30 00:54:05 +08:00
@crb912 用的是 logging .config.configfile()打开的一个配置文件 文件保存的是 asciiascii filefile 命令查看是 isoiso 那个类型 这个函数又不能指定编码 所以很纠结
meowoo
2018-05-30 00:54:49 +08:00
@F1024 是 logging 的那个打开配置文件的方法 我看了一下没有指定编码的参数
Sylv
2018-05-30 02:13:38 +08:00
上代码和报错信息,要不然只能瞎猜。
meowoo
2018-05-30 14:58:51 +08:00
@crb912 感谢 果然还是文件不是纯 ascii 编码 重新转码就 ok 了
meowoo
2018-05-30 15:01:03 +08:00
@Sylv 已经搞定了 就是因为文件不是纯 ascii 而是 iso-8859 但是还有一个问题 就是为啥是默认用 ASCII 去读取 怎么修改呢
Sylv
2018-05-30 15:43:45 +08:00
@meowoo
logging.config.fileconfig() 是用 open() 方法来读取文件的,open() 默认使用的编码是 locale.getpreferredencoding(False) 返回的编码,这个编码是由运行环境的语言环境变量判断来的,可能是你机子的语言环境变量没设置好。
或者可以用正确的编码打开文件后,再传给 logging.config.fileconfig():
with open('filename', encoding='utf-8') as f:
logging.config.fileconfig(f)
meowoo
2018-05-30 21:28:44 +08:00
@Sylv 好的 学习了 多谢大佬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/458768

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX