py2 中文碰到的一个问题

2020-04-21 06:10:30 +08:00
 oldbird

因为宿主软件的原因,必须使用 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 为什么输出乱码,请教。

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

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

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

进入 Python3 时代
ADMlN
2020-04-21 22:32:14 +08:00
写 python 脚本的时候,也要注意一下脚本文件本身的编码,python2 通常用 cp936 编码,并且要在文件开头加上:
```
# -*- coding: cp936 -*-
```
但如果又要用 tkinter 库的话,tkinter 显示中文用的编码是 utf-8,这时就要用 encode,decode 把编码从 cp936 转成 utf-8 再显示。

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

https://www.v2ex.com/t/664488

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

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

© 2021 V2EX