python 编码详解

本文介绍了在Python中处理编码问题的方法,特别是当涉及到GBK编码和Unicode转换时。当遇到`UnicodeDecodeError`,可以使用不同的解码模式,如`'replace'`来处理异常字符。同时,解释了Unicode作为中间编码格式的角色,并提供了测试字符串编码格式的工具——chardet库的使用示例。
摘要由CSDN通过智能技术生成

在编写python代码时一般要在页首指定编码格式

#-*- coding:gbk -*-

如果指定了编码格式为gbk,则如果想在代码读取一个非utf-8格式的文件,则需要首先读取的信息转成gbk

infile = file(spath, 'r')
line = infile.readline().strip()

line = line.decode('gbk')

但是当我们加了这一行时,经常会遇到

UnicodeDecodeError: 'gbk' codec can't decode bytes in position 30664-30665: illegal mul

这是因为在解码时在位置30664-30665遇到了异常字符。

解决办法是:

line = line.decode('gbk','replace') 

decode有三种模式,ignore、replace和restrict。分别代表转码时遇到特殊字符忽略、替换为?和最严厉的策略。

当然最严厉的就是遇到就不再编码了,直接打报告出来。



在python中我理解的是unicode 是一个中间编码格式,就是没种编码如果要转成其他格式都要先转成unicode。

譬如gbk转utf-8

line = line.decode('gbk')

先转换成unicode

line = line.encode('utf-8')

也可以写成一句

line = line.decode('gbk').encode('utf-8')


如何测试当前字串编码格式:

使用chardet-2.1.1(从网上搜索下载)

使用方式:

import sys

#加载你chardet放置的位置
sys.path.append("B:\Develop\pythonLib\chardet-2.1.1")
import chardet

print chardet.detect(str)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值