打开一个docker实例(例如docker run -ti ubuntu:16.04
),创建Python文件a.py
# -*- coding: utf-8 -*-
a = 'ö'
和
r.py
with open('a.py') as f: exec(f.read())
当执行
python r.py
时,全部是文件。但是,当使用python3
时,会让人恐惧Traceback (most recent call last):
File "r.py", line 2, in <module>
exec(f.read())
File "/usr/lib/python3.5/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 31: ordinal not in range(128)
奇怪的是,我只能在docker上复制它。
关于可能出了什么问题以及如何解决的任何提示? (请注意,我只能修改
r.py
。)
最佳答案
内部docker和外部docker之间的区别可能是LANG
环境变量-许多基本镜像默认未设置LANG
(或LANG=C
等)。设置一个明确的LANG=en_US.UTF-8
将导致open
正确解码源(在python 3中)。如果您想要python2中的python 3行为,则可以import io
并使用io.open
。
python2 / python3中的exec
也允许bytes
。
避免编码问题的一种方法是从磁盘读取字节形式的源:
with open('a.py', 'rb') as f:
exec(f.read())
关于python - POSIX语言环境,UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43005364/