通过在PyCharm 2016.3.2中运行的Python 3.6脚本打开UTF-8编码文件

通过在PyCharm 2016.3.2中运行的Python 3.6脚本打开UTF-8编码文件,python,python-3.x,encoding,utf-8,pycharm,Python,Python 3.x,Encoding,Utf 8,Pycharm,我对PyCharm和我正在开发的Python应用程序有一个非常奇怪的问题 Pycharm是Pycharm社区版2016.3.2 项目口译员为:3.6.0 马科斯·塞拉是谁 因为我在谷歌上搜索解决方案已经有一段时间了,我想在这里问一下,没有任何建议的想法对我有帮助 我想使用以下代码打开UTF-8编码的文件: #!/usr/bin/env python3 import os, platform def read(file): f = open(file, "r") c

我对PyCharm和我正在开发的Python应用程序有一个非常奇怪的问题

  • Pycharm是Pycharm社区版2016.3.2
  • 项目口译员为:3.6.0
  • 马科斯·塞拉是谁
因为我在谷歌上搜索解决方案已经有一段时间了,我想在这里问一下,没有任何建议的想法对我有帮助

我想使用以下代码打开UTF-8编码的文件:

#!/usr/bin/env python3    

import os, platform

def read(file):
    f = open(file, "r")
    content = f.read()
    f.close()
    return content

print(platform.python_version())
print(os.environ["PYTHONIOENCODING"])

content = read("testfile")
print(content)
代码在PyCharm中运行时崩溃。输出是

3.6.0
UTF-8
Traceback (most recent call last):
  File "/Users/xxx/Documents/Scripts/pycharmutf8/file.py", line 14, in <module>
    content = read("testfile")
  File "/Users/xxx/Documents/Scripts/pycharmutf8/file.py", line 7, in read
    content = f.read()
  File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 5: ordinal not in range(128)
我发现,在类似的情况下,建议人们在系统范围内将环境变量
pythonionecoding
设置为
utf-8:subrogateScape
(如您在上面的输出中所看到的)

export PYTHONIOENCODING=utf-8:surrogateescape
而且在PyCharm本身中(设置->构建->控制台->Python控制台->环境变量)


这没有任何效果。您还有其他建议吗?

如果要读取UTF8文件,请指定编码:

def read(file):
    with open(file, encoding='utf8') as f:
        content = f.read()

如果要读取UTF8文件,请指定编码:

def read(file):
    with open(file, encoding='utf8') as f:
        content = f.read()

如果很难更改开放调用的编码,即它发生在库中,则可以在运行配置中更改此环境变量:
LC_CTYPE=en_US.UTF-8

资料来源:

如果很难更改开放调用的编码,即它发生在库中,则可以在运行配置中更改此环境变量:
LC_CTYPE=en_US.UTF-8

资料来源:
open
使用
locale.getpreferredencoding(False)
猜测编码,因此我猜PyCharm设置的区域设置与您的终端不同。
open
使用
locale.getpreferredencoding(False)
猜测编码,我猜PyCharm设置的区域设置与您的终端不同。谢谢。这解决了我的问题。但是,我想知道为什么相同的代码在终端(工作)和PyCharm(不工作)中表现不同。正如@Mats comment所说,PyCharm和终端必须设置为不同的地区。该错误表明ASCII是默认值,Python在无法确定区域设置时选择ASCII。谢谢。这解决了我的问题。但是,我想知道为什么相同的代码在终端(工作)和PyCharm(不工作)中表现不同。正如@Mats comment所说,PyCharm和终端必须设置为不同的地区。该错误表明ASCII是默认值,Python在无法确定区域设置时选择ASCII。