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

2017-05-05 20:47:15 +08:00
 zscself

执行代码:

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 里

6259 次点击
所在节点    Python
21 条回复
Orice
2018-04-04 09:54:25 +08:00
我也出现了这种情况,是在读文件的时候,报错
然后,我在生成文件的部分,和读文件的部分,都声明了编码为 utf-8
问题就解决了
感谢 15 楼

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/359446

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX