Python编码方式

一、Python 2 字符编码
1、python 2的编码方式

​ 在python 2 中默认使用ASCII编码,一般情况下我们编写python脚本时,使用的都是utf-8编码。但是python2解释器解析python文本时默认采用ASCII编码,如果脚本中涉及到中文(包括注释),python2执行时都会报错。解决方式是,在脚本第一行添加声明,使用utf-8编码,解释器在执行时就会以utf-8的编码方式去解析脚本。

#-*- encoding:utf-8 -*-
2、python2 字符串类型

​ Python中有两种字符串类型,分别是str和unicode,str字符串其实是字节组成的序列,unicode字符串则表示为unicode类型的实例,可视为字符的序列(对应C语言里真正的字符串)。Python内部以16比特或32比特的整数表示Unicode字符串,这取决于Python解释器的编译方式。

​ 在python中没有特别指定时,字符串默认类型是str,在字符串前加u表示unicode类型

2.1、unicode

​ unicode(string[, encoding, errors])函数可根据指定的encoding将string字节序列转换为Unicode字符串。若未指定encoding参数,则默认使用ASCII编码(大于127的字符将被视为错误)。

2.2、encode与decode

​ (1)、encode([encoding], [errors=‘strict’])

​ 可根据指定的encoding将Unicode字符串转换为字节序列。若未指定encoding参数,则默认使用ASCII编码(大于127的字符将被视为错误)。

#-*- encoding:utf-8 -*-
import sys
import json
reload(sys)
sys.setdefaultencoding('utf-8')

str=u"编码方式"
print(type(str))			#<type 'unicode'>
print(type(str.encode()))	#<type 'str'>

​ (2)、decode([encoding], [errors])

​ 根据指定的encoding将字节序列转换为Unicode字符串,即使用该编码方式解释字节序列。若未指定encoding参数,则默认使用ASCII编码(大于127的字符将被视为错误)。unicode(str, encoding)str.decode(encoding)效果等同。

#-*- encoding:utf-8 -*-
import sys
import json
reload(sys)
sys.setdefaultencoding('utf-8')

str="编码方式"
print(type(str))			#<type 'str'>
print(type(str.decode()))	#<type 'unicode'>

​ (3)、编码的过程

​ 对一个中文字符串,进行编码,会报编码错误,试图将一个非ASCII码字符解码为ASCII

#-*- encoding:utf-8 -*-

str="编码方式"	# str类型
str=str.encode('utf8')		# 实际等同于str=str.decode('ascii').encode('utf8')	
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128) 

​ 这是由于使用encode对str类型字符串进行编码时,python会先进行解码得到unicode类型,然后再进行编码,默认的解码方式的ASCII码,对于大于127的字符无法解析,因此会报错。

解决方式:

方式1:sys.setdefaultencoding(‘utf-8’)

指定encode与decode的默认编码方式

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
#指定默认编码放

方式2:调用encode之前,先主动decode

str=str.decode('utf-8').encode('utf8')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值