你们的 PyCharm 会出现 Python 编码错误 UnicodeEncodeError: 'ascii' codec can't encode characters 吗?

执行代码:

49    print(sys.getdefaultencoding())
50    print('歌单:'+data.get('cdlist')[0].get('dissname')+' 开始写入')
51
52    with open(data.get('cdlist')[0].get('dissname').replace('/','') + '_json.txt', 'w') as f:
53        json.dump(data, f, indent=4)
54    f.close()
55
56    with open(data.get('cdlist')[0].get('dissname').replace('/','')+'.txt', 'w') as f:
57        for song in song_list:
58            f.write(song['songname']+'\n')
59    f.close()

PyCharm 会提示("songname"是日文)

utf-8
歌单:百首日语神曲 涤荡心灵的歌声 开始写入
Traceback (most recent call last):
  File "/Users/zscself/Dropbox/Source/PycharmProjects/QQ_music/main.py", line 58, in <module>
    f.write(song['songname']+'\n')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)

如果在 PyCharm 中的 Terminal 中运行 python ./main.py 会多出另外一个错误

Error in usercustomize; set PYTHONVERBOSE for traceback:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
utf-8
Traceback (most recent call last):
  File "main.py", line 50, in <module>
    print('\u6b4c\u5355\uff1a'+data.get('cdlist')[0].get('dissname')+' \u5f00\u59cb\u5199\u5165')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)

由上面两个错误可以看出

  1. 直接“ Run ”会导致变量里的非 ASCII 字符无法通过 write()写入文件,但是变量里的非 ASCII 字符可以通过 print()显示
  2. 如果在间接的在 PyCharm 里的 Terminal 运行'python3 ./main.py'会导致变量里的非 ASCII 字符无法通过 print()显示

真正诡异的是,这段代码可以正常运行在 zsh 里


你们的 PyCharm 会出现 Python 编码错误 UnicodeEncodeError: 'ascii' codec can't encode characters 吗?

22 回复

> 真正诡异的是,这段代码可以正常运行在 zsh 里。

加个 u 呗


遇到 UnicodeEncodeError: 'ascii' codec can't encode characters 错误,通常是因为你的代码或环境尝试用 ASCII 编码处理非 ASCII 字符(比如中文)。这跟 PyCharm 本身关系不大,主要是 Python 环境或代码的问题。

最常见的情况是打印或处理包含非 ASCII 字符的字符串时,系统的默认编码被设为了 ASCII。在 Python 3 中,字符串默认是 Unicode,但输出到控制台时,如果控制台(比如 Windows 的 cmd)不支持 UTF-8,或者 Python 的 PYTHONIOENCODING 环境变量没设对,就可能报错。

快速解决方法:

  1. 检查并设置环境变量(推荐):在运行配置里,或者系统环境变量里,添加 PYTHONIOENCODING=utf-8。在 PyCharm 中,你可以在 Run -> Edit Configurations... 里,找到你的运行配置,在 Environment variables 一栏加上这个。

  2. 在代码开头显式设置标准流编码(适用于 Python 3.7+):

    import sys
    import io
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
    sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
    
  3. 确保你的源代码文件保存为 UTF-8 编码:在 PyCharm 右下角可以看到当前文件编码,如果不是 UTF-8,点击它改成 UTF-8。

  4. 对于文件操作:读写文件时,明确指定 encoding='utf-8' 参数。

    with open('file.txt', 'r', encoding='utf-8') as f:
        content = f.read()
    

根本原因:Python 在需要将 Unicode 字符串编码为字节时(比如打印到控制台、写入文件),会使用一个默认编码。如果这个默认编码是 ASCII,而字符串里包含 ASCII 无法表示的字符(比如中文),就会抛出这个错误。Python 3 在 *nix 系统上通常默认是 UTF-8,但在 Windows 上有时会是系统本地编码(如 GBK),如果控制台是 UTF-8 模式,就可能不匹配。

一句话建议:优先检查并设置 PYTHONIOENCODING=utf-8 环境变量。

print(u’中文’) 也不好使

应该是内部 unicode 编码吧。试试 encode utf8

投奔 Python3 吧

天灭 Python2

用三引号括住这些字符试试

pycharm 右下角 修改文件编码方式为 utf-8

-- coding:utf-8 --

本来就是 3.6
‘Global Encoding’、‘Project Encoding’、'Default Encoding for properties files’这三项全部设置成 UTF-8
'# -- coding:utf-8 --‘和’# coding= utf-8’都试过了,还是不行。
没用
write()函数那个还好解决,调用 open()的时候加上参数 encoding="utf-8"就没问题了,其实不加参数在系统 shell 里也是可以运行的,但是没办法在 PyCharm 里运行。
至于在 PyCharm 里的 Terminal 无法运行,我认为是 PyCharm 的 Terminal 模块和系统“衔接”的时候出了问题,因为在 Intellij 的 Terminal 里也出现了同样的错误

去检查一下 console 的 encoding 设置

玩🐍必修课

能说下具体位置吗?反正我已经把配置里面所有带“ encoding ”的选项都设置了一遍。。。

search 一下 console 设置呗

遇到和你一摸一样的问题,就是在 pycharm 不行,zsh 可以,你最后解决了么?

最后解决方法是新建文件的时候加 encoding=‘utf8’就可以了。
with open(’%s.html’ % item, ‘w’, encoding=‘utf8’) as f:

你看九楼我的回复,这个 open()函数的编码问题我已经解决了。但是,现在,print()函数依然不能输出中文。


第一:
同样是
with open(‘fileName.txt’, ‘w’, encoding=“utf-8”) as f:
for song in song_list:
f.write(song[‘songname’]+’\n’)
f.close()
这段代码,如果我使用系统自带的终端,即便没有 encoding="utf-8"参数,依然可以运行。上述代码如果在 PyCharm 里的终端运行,必须加上 encoding=“utf-8”。关于这点,我挺不解的。
第二:
print(“中文字符”)
上述代码,通过系统自带终端和 PyCharm 的“ Run ”都正常运行。但是!但是!唯独没法再 PyCharm 里的终端运行,错误信息,在一开始我就贴出来了。
不知道你和我遇到的是不是同一个问题?

不仅仅是在 PyCharm,我在 Atom 编辑器也遇到了这样的问题,用编辑器的 runner 插件,就是会报你那样的错误,但是在终端 bash 或者 zsh 就是正常的,捣鼓了半天,还是找不到解决办法,请问你解决了吗?请赐教~

并没有。。。

郁闷。搞得现在每次要运行,都得用终端来跑。~~Google、stackoverflow 上面也找不到。明明我这里也是使用 Python3.6 了。不应该存在编码问题的。~

我也出现了这种情况,是在读文件的时候,报错
然后,我在生成文件的部分,和读文件的部分,都声明了编码为 utf-8
问题就解决了
感谢 15 楼

回到顶部