你们的 PyCharm 会出现 UnicodeEncodeError: 'ascii' codec can't encode characters 错误吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zscself
V2EX    Python

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

  •  
  •   zscself
    firedent 2017-05-05 20:47:15 +08:00 6481 次点击
    这是一个创建于 3087 天前的主题,其中的信息可能已经有所发展或是发生改变。

    执行代码:

    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 里

    21 条回复    2018-04-04 09:54:25 +08:00
    konia
        1
    konia  
       2017-05-05 21:37:54 +08:00 via iPhone
    > 真正诡异的是,这段代码可以正常运行在 zsh 里。

    加个 u 呗
    zscself
        2
    < href="/member/zscself" class="dark">zscself  
    OP
       2017-05-05 21:44:02 +08:00
    @konia print(u'中文') 也不好使
    Apeoud
        3
    Apeoud  
       2017-05-05 22:41:40 +08:00 via Android
    应该是内部 unicode 编码吧。试试 encode utf8
    Panmax
        4
    Panmax  
       2017-05-05 23:37:25 +08:00 via iPhone
    投奔 Python3 吧
    EricCartman
        5
    EricCartman  
       2017-05-05 23:56:53 +08:00
    天灭 Python2
    syahd
        6
    syahd  
       2017-05-06 09:33:56 +08:00
    用三引号括住这些字符试试
    freestyle
        7
    freestyle  
       2017-05-06 11:58:09 +08:00
    pycharm 右下角 修改文件编码方式为 utf-8
    uucloud
        8
    uucloud  
       2017-05-06 12:04:29 +08:00
    # -*- coding:utf-8 -*-
    zscself
        9
    zscself  
    OP
       2017-05-06 15:34:27 +08:00
    @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 里也出现了同样的错误
    wwqgtxx
        10
    wwqgtxx  
       2017-05-06 18:37:07 +08:00
    去检查一下 console 的 encoding 设置
    esile
        11
    esile  
       2017-05-06 22:24:52 +08:00 via iPhone
    玩必修课
    zscself
        12
    zscself  
    OP
       2017-05-07 09:24:25 +08:00
    @wwqgtxx 能说下具体位置吗?反正我已经把配置里面所有带“ encoding ”的选项都设置了一遍。。。
    wwqgtxx
        13
    wwqgtxx  
       2017-05-07 10:49:50 +08:00 via iPhone
    @zscself search 一下 console 设置呗
    svcvit
        14
    svcvit  
       2017-05-20 20:49:05 +08:00
    遇到和你一摸一样的问题,就是在 pycharm 不行,zsh 可以,你最后解决了么?
    svcvit
        15
    svcvit  
       2017-05-21 08:45:28 +08:00
    最后解决方法是新建文件的时候加 encoding='utf8'就可以了。
    with open('%s.html' % item, 'w', encoding='utf8') as f:
    zscself
        16
    zscself  
    OP
       2017-05-21 08:56:58 +08:00
    @svcvit 你看九楼我的回复,这个 open()函数的编码问题我已经解决了。但是,现在,print()函数依然不能输出中文。
    zscself
        17
    zcself  
    OP
       2017-05-21 09:03:39 +08:00
    @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 里的终端运行,错误信息,在一开始我就贴出来了。
    不知道你和我遇到的是不是同一个问题?
    pennz
        18
    pennz  
       2017-09-17 14:38:11 +08:00
    @zscself 不仅仅是在 PyCharm,我在 Atom 编辑器也遇到了这样的问题,用编辑器的 runner 插件,就是会报你那样的错误,但是在终端 bash 或者 zsh 就是正常的,捣鼓了半天,还是找不到解决办法,请问你解决了吗?请赐教~
    zscself
        19
    zscself  
    OP
       2017-09-17 15:04:46 +08:00
    @pennz 并没有。。。
    pennz
        20
    pennz  
       2017-09-17 15:32:32 +08:00
    @zscself 郁闷。搞得现在每次要运行,都得用终端来跑。~~Google、stackoverflow 上面也找不到。明明我这里也是使用 Python3.6 了。不应该存在编码问题的。~
    Orice
        21
    Orice  
       2018-04-04 09:54:25 +08:00
    我也出现了这种情况,是在读文件的时候,报错
    然后,我在生成文件的部分,和读文件的部分,都声明了编码为 utf-8
    问题就解决了
    感谢 15 楼
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2539 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:33 PVG 18:33 LAX 03:33 JFK 06:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86