Python POSIX区域设置,UnicodeDecodeError
打开docker实例(例如,Python POSIX区域设置,UnicodeDecodeError,python,docker,unicode,Python,Docker,Unicode,打开docker实例(例如,docker运行-ti ubuntu:16.04),创建Python文件a.py # -*- coding: utf-8 -*- a = 'ö' with open('a.py') as f: exec(f.read()) 和r.py # -*- coding: utf-8 -*- a = 'ö' with open('a.py') as f: exec(f.read()) 执行python r.py时,所有内容都是文件。然而,当使用python3时,人们会感
docker运行-ti ubuntu:16.04
),创建Python文件a.py
# -*- coding: utf-8 -*-
a = 'ö'
with open('a.py') as f: exec(f.read())
和r.py
# -*- coding: utf-8 -*-
a = 'ö'
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”,第2行,在
exec(f.read())
文件“/usr/lib/python3.5/encodings/ascii.py”,第26行,解码
返回编解码器。ascii_解码(输入,自身错误)[0]
UnicodeDecodeError:“ascii”编解码器无法解码位置31处的字节0xc3:序号不在范围内(128)
奇怪的是,我只能在docker上复制这个
关于可能出现的问题以及如何修复的任何提示?(请注意,我只能修改
r.py
)您是否尝试过io
with io.open('a.py', encoding='utf-8') as f:
do stuff
您是否尝试过
io
with io.open('a.py', encoding='utf-8') as f:
do stuff
使用UTF-8语言环境启动docker可以让一切按预期进行
docker run -e LANG=C.UTF-8 -ti ubuntu:16.04
使用UTF-8语言环境启动docker可以让一切按预期进行
docker run -e LANG=C.UTF-8 -ti ubuntu:16.04
内部docker和外部docker之间的区别可能是
LANG
环境变量——许多基本映像默认为noLANG
集(或LANG=C
等)。设置显式的LANG=en_US.UTF-8
将导致open
正确解码源代码(在python 3中)。如果希望python2中的python 3行为,可以导入io
并使用io.open
python2/python3中的exec
也允许字节
避免编码问题的一种方法是以字节形式从磁盘读取源:
with open('a.py', 'rb') as f:
exec(f.read())
内部docker和外部docker之间的区别可能是LANG
环境变量——许多基本映像默认为noLANG
集(或LANG=C
等)。设置显式的LANG=en_US.UTF-8
将导致open
正确解码源代码(在python 3中)。如果希望python2中的python 3行为,可以导入io
并使用io.open
python2/python3中的exec
也允许字节
避免编码问题的一种方法是以字节形式从磁盘读取源:
with open('a.py', 'rb') as f:
exec(f.read())
使用python3
,使用python
失败:SyntaxError:Unicode字符串中的编码声明
。使用python3
,使用python
失败:SyntaxError:Unicode字符串中的编码声明
。谢谢!我注意到python3和a={};使用open('a.py','rb')作为f:exec(f.read(),a)
(将a.py
的内容存储在dict中),这会产生错误错误-无法将数据写入流:
。通过设置环境变量export pythonionecoding=UTF-8
修复。谢谢!我注意到python3和a={};使用open('a.py','rb')作为f:exec(f.read(),a)
(将a.py
的内容存储在dict中),这会产生错误错误-无法将数据写入流:
。通过设置环境变量export pythonionecoding=UTF-8
修复了此问题。