首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POSIX,UnicodeDecodeError

POSIX,UnicodeDecodeError
EN

Stack Overflow用户
提问于 2017-03-24 17:09:17
回答 3查看 468关注 0票数 0

打开一个码头实例(例如,docker run -ti ubuntu:16.04),创建a.py文件

代码语言:javascript
复制
# -*- coding: utf-8 -*-
a = 'ö'

r.py

代码语言:javascript
复制
with open('a.py') as f: exec(f.read())

在执行python r.py时,所有内容都是文件。然而,当使用python3时,人们会感到恐惧

代码语言:javascript
复制
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。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

避免编码问题的一种方法是将源从磁盘中读取为字节:

代码语言:javascript
复制
with open('a.py', 'rb') as f:
    exec(f.read())
票数 1
EN

Stack Overflow用户

发布于 2017-03-24 17:37:25

使用UTF-8环境启动对接器,使所有工作都如预期的那样工作。

代码语言:javascript
复制
docker run -e LANG=C.UTF-8 -ti ubuntu:16.04
票数 2
EN

Stack Overflow用户

发布于 2017-03-24 17:14:24

你试过io吗?

代码语言:javascript
复制
with io.open('a.py', encoding='utf-8') as f:
    do stuff
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43005364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档