POSIX语言环境,UnicodeDecodeError

时间:2017-03-24 17:09:17

标签: python docker unicode

打开泊坞窗实例(例如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。)

3 个答案:

答案 0 :(得分:2)

使用UTF-8语言环境启动docker使其全部按预期工作

docker run -e LANG=C.UTF-8 -ti ubuntu:16.04

答案 1 :(得分:1)

内部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())

答案 2 :(得分:0)

您是否尝试过io

with io.open('a.py', encoding='utf-8') as f:
    do stuff