一、问题及原因
配置autopep8插件并安装相关依赖后,VSCode无法自动格式化含有中文的代码文件。
终端输出的报错信息如下:
从上图可以看到文件的编码确实是UTF-8,因此排除文件编码错误的可能性。根据报错信息中提示的gbk,推测是读取或写入流时编码错误。
定位到错误信息出现的文件位置:
这里直接将第4516行改为
wrap_output(sys.stdout, encoding='utf8').write(fixed_stdin)
是无效的,在查阅资料后得知这段代码在从标准输入流中读取数据时采用的编码是默认的系统编码,也即gbk,强制在写入时转换为UTF-8依然会报错
二、解决方法
参考 ComingToy - fix gbk encode error 的提交记录将相应的修改应用到插件目录的autopep8.py文件中即可。
~\.vscode\extensions\ms-python.autopep8-2023.4.0\bundled\libs\autopep8.py
如果不再报错但无法格式化,可以将 input_encoding 和 output_encoding 统一设置为 encoding