执行代码:
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)
由上面两个错误可以看出
- 直接“ Run ”会导致变量里的非 ASCII 字符无法通过 write()写入文件,但是变量里的非 ASCII 字符可以通过 print()显示
- 如果在间接的在 PyCharm 里的 Terminal 运行'python3 ./main.py'会导致变量里的非 ASCII 字符无法通过 print()显示
真正诡异的是,这段代码可以正常运行在 zsh 里。