文档章节

python转码时出现'illegal multibyte sequen'错误

Jlan
 Jlan
发布于 2015/10/15 11:42
字数 407
阅读 451
收藏 1

在Python中,可以对String调用decode和encode方法来实现转码。

比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作 

s.decode('gbk').encode('utf-8′) 
可是,在实际开发中,我发现,这种办法经常会出现异常: 
UnicodeDecodeError: ‘gbk' codec can't decode bytes in position 30664-30665: illegal multibyte sequence 
这 是因为遇到了非法字符——尤其是在某些用C/C++编写的程序中,全角空格往往有多种不同的实现方式,比如\xa3\xa0,或者\xa4\x57,这些 字符,看起来都是全角空格,但它们并不是“合法”的全角空格(真正的全角空格是\xa1\xa1),因此在转码的过程中出现了异常。 
这样的问题很让人头疼,因为只要字符串中出现了一个非法字符,整个字符串——有时候,就是整篇文章——就都无法转码。 

解决办法: 
s.decode('gbk', ‘ignore').encode('utf-8′) 
因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常; 
如果设置为ignore,则会忽略非法字符; 
如果设置为replace,则会用?取代非法字符; 
如果设置为xmlcharrefreplace,则使用XML的字符引用。 

python文档 

decode( [encoding[, errors]]) 
Decodes the string using the codec registered for encoding. encoding defaults to the default string encoding. errors may be given to set a different error handling scheme. The default is 'strict', meaning that encoding errors raise UnicodeError. Other possible values are 'ignore', 'replace' and any other name registered via codecs.register_error, see section 4.8.1.


© 著作权归作者所有

共有 人打赏支持
Jlan
粉丝 2
博文 45
码字总数 17474
作品 0
浦东
Python Unicode与中文处理(转)

Python Unicode与中文处理 python中的unicode是让人很困惑、比较难以理解的问题,本文力求彻底解决这些问题; 1.unicode、gbk、gb2312、utf-8的关系; http://www.pythonclub.org/python-bas...

coldlemon
2014/01/04
0
0
python2利用urllib2抓取中文网页乱码的问题

话说晚上上完爬虫抓取班会之后群里有童鞋扔出来了一个网址 www.runoob.com/python/python-exercise-example1.html 并且疑问说这个地址用urllib2抓出来的居然是乱码希望大家一起看看。本着上山...

木木成洋
2017/11/11
0
0
python2利用urllib2抓取中文网页乱码的问题

话说晚上上完爬虫抓取班会之后群里有童鞋扔出来了一个网址 www.runoob.com/python/python-exercise-example1.html 并且疑问说这个地址用urllib2抓出来的居然是乱码希望大家一起看看。本着上山...

木木成洋
2017/11/02
0
0
Python3 读取文件出错: 'gbk' codec can't decode byte 0x8

Python3 读取文件内容的时候出错: for line in f.readlines(): UnicodeDecodeError: 'gbk' codec can't decode byte 0x8e in position 8: illegal multibyte sequence 这个时候给open添加一......

卖小女孩的小火柴
2016/01/08
471
0
python 中文乱码 问题深入分析

在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854; 2. UTF-8,E59388; 3. GBK,B9FE。 一、python中的str和unicode 一直以来,python中...

quanpower
2013/02/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

redis-hash

哈希类型是指健值本身又是一个键值对结构 基本命令: hset key field value 设置值 hget(获取),hdel(删除),hlen(计算field个数),hmget(批量设置),hexists(是否存在),hkeys(获取所有的...

拐美人
16分钟前
1
0
简单的svm例子

数据来源:https://github.com/oumiga1314/Coursera-ML-AndrewNg-Notes/blob/master/code/ex6-SVM/data/ex6data1.mat import pandas as pd import numpy as np import scipy.io as sio impor......

南桥北木
20分钟前
0
0
android 关于View的一些整理

1、Button text的值为英文时,会自动转换成大写。如需取消,设置android:textAllCaps="false" 2、控件的可见性 可以在layout的配置文件中,配置android:visibility属性 调用setVisibility()...

西米小娅
31分钟前
0
0
Spring JDBC数据源分析

Spring数据源分析 分析这样一段代码: package com.jason.spring.datasource.jdbc;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframew......

宸明
39分钟前
1
0
FatJar:适用于sdk多module打包和合并多个jar的gradle插件

usage: 1.下载fatJar.gradle放置于project根目录 2.在project的build.gradle中添加依赖和配置: apply from: 'fatJar.gradle'buildscript { dependencies { classpath 'xyz......

SuShine
56分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部