python - POSIX语言环境,UnicodeDecodeError

标签 python docker unicode

打开一个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/

相关文章:

docker - Dockerfile ARG始终为null

visual-studio - 在 Visual Studio 中运行时将环境变量传递给 Docker 容器

docker - 如何将参数传递给容器中的 python 脚本

python - 如何使用 pywintypes.Unicode()?

HTML5 页面语言、方向和编码

c - 如何正确地逐字节读取文件而不丢失任何信息

python - 文本小部件内的 Tkinter 检查按钮和滚动

python - Django-Rest-Framework 关系和超链接 API 问题

python - 使用 python 数据框,将满足条件的行数列添加到满足条件的每一行

python - Flask 使用带有 LIKE % % 的 mysql 查询