UnicodeDecodeError: 'utf-8'在PyCharm社区版中调试Python文件时的解决方法

6

目前结论:

转换后文件的编码格式utf-8->utf-8 big->ansi->utf-8。在每次转换后重新打开文件。

经过一段时间的观察,不存在该错误


当我使用PyCharm调试.py文件时,同一个文件有时会报UnicodeDecodeError错误,有时又正常。我的操作系统是Windows 10,PyCharm版本是2020.3.3社区版。

错误信息如下:

Traceback (most recent call last):
  File "D:\Program Files\JetBrains\PyCharm Community Edition 2020.3.3\plugins\python-ce\helpers\pydev\_pydevd_bundle\pydevd_comm.py", line 301, in _on_run
    r = r.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 1022-1023: unexpected end of data

我尝试将以下代码添加到文件的头部,但有时仍会出现错误,请问该如何解决?

#!/usr/bin/env Python
# coding=utf-8

我发现用记事本保存成UTF-8格式的文件还有另一种方式。我尝试了一下,但有时候还是会出现错误。


1
Python模块(或文件)的默认编码是UTF-8。你可以验证PyCharm编码设置。这意味着在文件顶部指定编码通常不必要(历史上最后两行用于此目的但现在已经基本不需要了)。你只需要在IDE中更改编码即可。这个问题不是关于代码,而是关于从IDE中设置文件的编码。 - bad_coder
@bad_coder 谢谢你。在IDE编码设置中,项目编码和属性文件不是UTF-8,已经被更改了。 - jaried
5个回答

2
在问题描述中,没有一个单一的答案来解决这个问题。许多问题可能会导致出现指示错误,因此最好在 PyCharm IDE 的上下文中考虑几个可能的因素。
每个Python文件.py(或任何其他文件)都有一个编码。 .py源代码文件的默认编码是Unicode UTF-8。这个问题经常困扰初学者,因此让我们引用官方文档中相关的引用(以缩短不必要的阅读时间): Python的Unicode支持 Python源代码的默认编码是UTF-8,因此您可以在字符串文字中直接包含Unicode字符。
这意味着在大多数情况下,您不需要编码字符串,请参见Python源代码编码 - PEP 263。当前惯例是将源文件默认编码为UTF-8,并在模块顶部省略编码字符串(这也更简洁)。
PyCharm IDE具有许多编码配置,可以逐步细化,从全局到项目再到文件路径。默认情况下,所有内容都应设置为UTF-8,特别是源代码。请参见官方的PyCharm文档配置文件编码设置
上述例外情况是如果您正在处理外部数据文件,则仍应将源代码保留为UTF-8,并使用所需的任何编码打开数据文件。关于UnicodeDecodeError的大多数问题都是关于在使用open()函数打开一些数据文件时指定正确的文件编码(它们不涉及您编写代码的源文件的编码)。
当您的源文件导致此错误时,常见原因是复制粘贴或打开未以UTF-8编码的源代码文件。(当您从未以UTF-8编码的文件中进行复制粘贴且IDE不会自动将您要复制粘贴的内容转换为编辑器时,复制粘贴尤其令人意外)。这可能会导致上述错误。因此,您应该缩小源代码文件的范围,找出编码不是UTF-8的文件并进行转换。
我们无法访问您的项目文件,但错误消息显示调试器试图打开一个用户源代码文件,该文件未编码为UTF-8,与IDE配置和模块编码不符。

文件 "D:\Program Files\JetBrains\PyCharm Community Edition 2020.3.3\plugins\python-ce\helpers\pydev_pydevd_bundle\pydevd_comm.py"


这个文件是PyCharm自带的文件,我会尝试将它保存为utf-8编码格式。 - jaried
1
@jaried 不,我不认为问题是随PyCharm安装而来的文件。很可能是你编写(或正在尝试执行)的其中一个文件。 - bad_coder
我修改了编码设置并观察了一段时间,谢谢。 - jaried
不要尝试更改PyCharm安装的任何文件,否则可能会破坏IDE。例外是一些XML配置文件。 - bad_coder

2

我曾经遇到了同样的问题,后来在我的解释器设置中更改了Python可执行文件的大小写,如此链接所述. 简而言之,有时候PyCharm会尝试使用大写字母"P"的Python来执行venv目录中的符号链接,而不是小写的python。改变后,我就可以再次进行调试了。


这对我来说有点不同,而且我的操作系统是Windows。 - jaried
我不知道Windows版本是如何工作的,但你可以尝试按照相同的步骤进行操作:检查你路径中选择的解释器是否为大写,并在需要时进行更改。 - batero

1

我的答案

嗨,我已经解决了这个问题,我遵循了这个博客,但在我的情况下是python(小写),所以我尝试进行更改

从:{你的项目路径} / venv / bin / python
到:{你的项目路径} / venv / bin / python3.8

我不知道为什么,但这对我有效。


0

请查看Stefan Ukena在此线程中的回答:
https://youtrack.jetbrains.com/issue/PY-14497#focus=Comments-27-5243196.0-0

如果链接失效,请看以下引用:

您可能需要在Pycharm设置中更改Python解释器。在我的情况下(使用pipenv),它指向具有大写P的/Library/.../bin/Python。打开文件夹并检查,我发现该文件或符号链接实际上是小写p的python。在Pycharm设置中将其从.../Python更改为.../python可以解决此问题。(之后我必须重新启动Pycharm。)

这也帮助了我,但只有当我切换到pipenv而不是通常的venv时才有效。我将Python更改为python,调试器就可以工作了,但我仍然会收到错误/警告:

OSError: [Errno 9] Bad file descriptor 

但它仍然可以工作。没有调试器,它按预期工作且没有上述错误。


-2

我的代码第10行被用#注释掉了。这与行末的\n有关吗? - jaried

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接