执行代码:
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)
由上面两个错误可以看出
真正诡异的是,这段代码可以正常运行在 zsh 里。
![]() | 1 konia 2017-05-05 21:37:54 +08:00 via iPhone > 真正诡异的是,这段代码可以正常运行在 zsh 里。 加个 u 呗 |
![]() | 2 < href="/member/zscself" class="dark">zscself OP @konia print(u'中文') 也不好使 |
3 Apeoud 2017-05-05 22:41:40 +08:00 via Android 应该是内部 unicode 编码吧。试试 encode utf8 |
![]() | 4 Panmax 2017-05-05 23:37:25 +08:00 via iPhone 投奔 Python3 吧 |
![]() | 5 EricCartman 2017-05-05 23:56:53 +08:00 天灭 Python2 |
![]() | 6 syahd 2017-05-06 09:33:56 +08:00 用三引号括住这些字符试试 |
![]() | 7 freestyle 2017-05-06 11:58:09 +08:00 pycharm 右下角 修改文件编码方式为 utf-8 |
![]() | 8 uucloud 2017-05-06 12:04:29 +08:00 # -*- coding:utf-8 -*- |
![]() | 9 zscself OP @Panmax @EricCartman 本来就是 3.6 @freestyle 'Global Encoding'、'Project Encoding'、'Default Encoding for properties files'这三项全部设置成 UTF-8 @uucloud '# -*- coding:utf-8 -*-'和'# coding= utf-8'都试过了,还是不行。 @whwq2012 没用 write()函数那个还好解决,调用 open()的时候加上参数 encoding="utf-8"就没问题了,其实不加参数在系统 shell 里也是可以运行的,但是没办法在 PyCharm 里运行。 至于在 PyCharm 里的 Terminal 无法运行,我认为是 PyCharm 的 Terminal 模块和系统“衔接”的时候出了问题,因为在 Intellij 的 Terminal 里也出现了同样的错误 |
![]() | 10 wwqgtxx 2017-05-06 18:37:07 +08:00 去检查一下 console 的 encoding 设置 |
![]() | 11 esile 2017-05-06 22:24:52 +08:00 via iPhone 玩必修课 |
14 svcvit 2017-05-20 20:49:05 +08:00 遇到和你一摸一样的问题,就是在 pycharm 不行,zsh 可以,你最后解决了么? |
15 svcvit 2017-05-21 08:45:28 +08:00 最后解决方法是新建文件的时候加 encoding='utf8'就可以了。 with open('%s.html' % item, 'w', encoding='utf8') as f: |
![]() | 16 zscself OP @svcvit 你看九楼我的回复,这个 open()函数的编码问题我已经解决了。但是,现在,print()函数依然不能输出中文。 |
![]() | 17 zcself OP @svcvit 第一: 同样是 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 里的终端运行,错误信息,在一开始我就贴出来了。 不知道你和我遇到的是不是同一个问题? |
18 pennz 2017-09-17 14:38:11 +08:00 @zscself 不仅仅是在 PyCharm,我在 Atom 编辑器也遇到了这样的问题,用编辑器的 runner 插件,就是会报你那样的错误,但是在终端 bash 或者 zsh 就是正常的,捣鼓了半天,还是找不到解决办法,请问你解决了吗?请赐教~ |
20 pennz 2017-09-17 15:32:32 +08:00 @zscself 郁闷。搞得现在每次要运行,都得用终端来跑。~~Google、stackoverflow 上面也找不到。明明我这里也是使用 Python3.6 了。不应该存在编码问题的。~ |
21 Orice 2018-04-04 09:54:25 +08:00 我也出现了这种情况,是在读文件的时候,报错 然后,我在生成文件的部分,和读文件的部分,都声明了编码为 utf-8 问题就解决了 感谢 15 楼 |