打开一个码头实例(例如,docker run -ti ubuntu:16.04),创建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)奇怪的是,我只能在码头上复制这个。
对于可能出了什么问题,以及如何解决它,有什么提示吗?(请注意,我只能修改r.py。)
发布于 2017-03-24 22:13:14
内部对接和外部对接之间的区别很可能是LANG环境变量--许多基本图像默认为没有LANG集(或LANG=C等等)。设置一个显式的LANG=en_US.UTF-8将导致open正确地解码源代码(在python 3中)。如果您想要python2中的python 3行为,可以使用import io并使用io.open。
exec in python2 / python3也允许bytes。
避免编码问题的一种方法是将源从磁盘中读取为字节:
with open('a.py', 'rb') as f:
exec(f.read())发布于 2017-03-24 17:37:25
使用UTF-8环境启动对接器,使所有工作都如预期的那样工作。
docker run -e LANG=C.UTF-8 -ti ubuntu:16.04发布于 2017-03-24 17:14:24
你试过io吗?
with io.open('a.py', encoding='utf-8') as f:
do stuffhttps://stackoverflow.com/questions/43005364
复制相似问题