python中文编码相关问题

环境

我这里使用的环境是python2.7

正常使用,不用特殊处理

如获取路径,去读取文件,可以直接使用,不进行特殊处理
如果是中文路径的话, 不用关心,直接使用路径即可, 因为读取出来的就是gbk格式的,如下:

print __file__
print os.path.realpath(__file__)
#这个目录下如果有文件,我们是可以直接使用这个路径进行读取的

非要看一下中文的话

但是你要是输出出来的话,肯定是乱码, 因为这里是gbk格式的,我们用的ide大概率是utf-8的,这个不用管,程序能知道就行,如果你你非要看一下的话,那么直接用gbk解码就行了, 如下:

print __file__.decode('gbk')
print os.path.realpath(__file__.decode('gbk'))

如果想在cmd里直接输出中文, 那么可以:

x = '你好世界'
print x.decode('utf-8').encode('gbk')

有几点要注意的是

1. pyqt

qt初始化的时候,如果要指定qt的插件路径,那么我们要传进去unicode,所以要用gbk解码一下

2. 获取管理员权限

下面两个地方最好也用gbk解码下

ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable.decode('gbk')), unicode(__file__.decode('gbk')), None, 1)
3. os.listdir()

这个方法是用来列举文件夹下文件的,接受一个unicode的参数,所以

  1. 如果是直接手写中文的话,那么需要decode(utf-8')
  2. 如果是读取的中文的话,那么需要decode('gbk')

大结局

python2默认是unicode编码
decode就是特殊编码转python2默认的unicode
encode就是python2默认地unicode转特殊编码

x = u'你好世界'

两个字符串拼接的时候, 只要有一个是unicode, 另一个也必须是unicode, 例如

x = u'你好世界'
y = str('你好世界')

print x, type(x)
print y, type(y)

print '{}{}'.format(x, y)
print '%s, %s' % (x, y)

中文str转中文unicodedecode('utf-8')
中文unicode转中文strencode('utf-8')
所以两个字符串拼接, 不确定是str还是unicode的时候, 可以这样

a = get_a()
b = get_b()
if isinstance(a, unicode):
	a = a.encode('utf-8')
if isinstance(b, unicode):
	b = b.encode('utf-8)
res = '{}{}'.format(a, b)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值