python中的编码问题

57 篇文章 12 订阅
22 篇文章 2 订阅

Python 中的编码问题

在python中遇到编码问题主要来自于ASCIIgbk两个方面。win中python为unicode 编码而控制台一般为gbk编码

ASCII

对于ASCII来说,是由于这一编码系统的显示导致其无法编码中文和特殊字符,所以需要在开始声明 使用utf-8编码.或者在代码开头著名_*_ coding:utf-8 _*_.
一些有用的命令,查询系统的代码情况:

import sys
sys.stdout.encoding  #输出系统编码 cp936
import local
locale.getdefaultlocale() #输出 ('zh_CN', 'cp936')

也可以利用系统模块来进行全局设置:

import sys
reload(sys);
sys.setdefaultencoding('utf-8')
gbk

gbk不能解码的问题主要来自于控制台输出为gbk默认编码,所以需要将待输出的string先encode(‘gbk’)以符合控制台的输出,这时候某些在python中的以unicode编码的字符无法用gbk表示,就会造成无法输出\x 0x0x的字样.

所以先要将unicode表示的字符串encode('gbk')交给print才能使用控制台默认编码gbk输出。

s = "some speciall characeres #$%^&*"
s.encode('gbk','ignore');  #ignore encode problems
print s

保存文件的时候调用的是python内部的写模块,所以gbk不会报错,windows cmd输出才会报错。在进行网络编程时,将get或者post等响应指定编码是很重要的 response.encoding = 'utf-8'

一个编码解码的流程:

字符|—–编码encode —-> |byte字节流| ———-解码decode——–>|字符。

其中编码和解码就是一种数据的转换方式,将字符转为一种字节的表示,包括ascii,gbk,unicode,不同编解码的规则就是不同的字符编码方案。

注:python3 默认编码为unicode,但win系统不是,造成ptint输出使用系统默认编码而报错。
一定要注意win系统的gbk编码不足以表示所有的字符,同时ascii编码也不够表示中文和特殊字符。接收字符的时候指定为unicode编码规避ascii问题,输出的时候根据系统来指定编码避免报错。
可以用UnicodeEncodeError#来捕捉编码异常
- python 中变量默认是utf-8编码,输出就需要用对应的decode('utf-8')来解码,或者使用输出对应编码来encode('gbk'), 终端输出包含了对byte的解码过程。

参考资料1,2,3,4

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值