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
oldbird
V2EX  ›  Python

py2 中文碰到的一个问题

  •  
  •   oldbird · 2020-04-21 06:10:30 +08:00 · 2380 次点击
    这是一个创建于 1684 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为宿主软件的原因,必须使用 py2 。 WIN10 中文系统,在 PY2.7 的 IDLE 里做了个试验,输入:

    a="汽车"

    print a,len(a),type(a)

    b=a.decode('gbk')

    print b,len(b),type(b)

    c=unicode(a)

    print c,len(c),type(c)

    d=u'汽车'

    print d,len(d),type(d)

    输出:

    汽车 4 <type 'str'>

    汽车 2 <type 'unicode'>

    汽车 2 <type 'unicode'>

    Æû³µ 4 <type 'unicode'> 不理解 d 为什么输出乱码,请教。

    7 条回复    2020-04-21 22:32:14 +08:00
    ysc3839
        1
    ysc3839  
       2020-04-21 06:33:44 +08:00
    Python 3 中 print('Æû³µ'.encode('latin-1').decode('gbk')) 的结果是 "汽车",所以推测 Python 把这个文件当成 latin-1 编码进行解码了。
    superrichman
        2
    superrichman  
       2020-04-21 08:14:48 +08:00 via iPhone
    py2 + 中文 windows 环境 = 中文解码灾难现场

    py2 想要正常点的中文得在开头对 sys 设置 defaultencoding,输出的时候还得用 encode,decode 鼓捣一番。windows 有些环境默认还是 gbk,或者是 cp936 或者是其他乱七八糟的编码,你在 a 程序里能正常输出,换到 b 程序又是乱码。

    其实 py3 和 py2 可以在同一个系统里共存的,直接用 py3 不香吗?
    Flourite
        3
    Flourite  
       2020-04-21 09:18:02 +08:00
    二楼正解,还碰到过 py2 解码的问题,接口一切正常,但不知道为什么接口过来的数据解码后就乱码了,py3 重写搞定
    liangch
        4
    liangch  
       2020-04-21 10:56:18 +08:00
    用 py3 吧。省力点。
    SakuraSa
        5
    SakuraSa  
       2020-04-21 12:16:56 +08:00
    试试添加环境变量:PYTHONIOENCODING=gbk
    Mark24
        6
    Mark24  
       2020-04-21 15:28:07 +08:00
    今天 Python2 正式结束维护。

    进入 Python3 时代
    ADMlN
        7
    ADMlN  
       2020-04-21 22:32:14 +08:00
    写 python 脚本的时候,也要注意一下脚本文件本身的编码,python2 通常用 cp936 编码,并且要在文件开头加上:
    ```
    # -*- coding: cp936 -*-
    ```
    但如果又要用 tkinter 库的话,tkinter 显示中文用的编码是 utf-8,这时就要用 encode,decode 把编码从 cp936 转成 utf-8 再显示。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2826 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:00 · PVG 12:00 · LAX 20:00 · JFK 23:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.