Python中解码decode()与编码encode()与错误处理 ... - 博客园
文章推薦指數: 80 %
errors may be given to set a different error handling scheme. The default for errors is 'strict' , meaning that encoding errors raise a ...
首页
新闻
博问
专区
闪存
班级
我的博客
我的园子
账号设置
简洁模式...
退出登录
注册
登录
樟樟22
Python中解码decode()与编码encode()与错误处理UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xab
编码方法encoding()
描述
encode()方法以指定的编码格式编码字符串,默认编码为'utf-8'。
将字符串由string类型变成bytes类型。
对应的解码方法:bytesdecode() 方法。
语法
str.encode([encoding='utf-8'][,errors='strict'])
str是表示需要编码的字符串,并且是个string类型。
encoding-- 可选参数,要使用的编码方案,默认编码为'utf-8'。
errors--可选参数,设置不同错误的处理方案。
默认为'strict',意为编码错误引起一个UnicodeError。
其他可能得值有'ignore','replace','xmlcharrefreplace','backslashreplace'以及通过codecs.register_error()注册的任何值。
返回值
该方法返回编码后的字符串,它是一个bytes对象,这个字节对象是用于下面的解码用的。
官方文档解释:
str.encode(encoding="utf-8", errors="strict")
Returnan encodedversionofthestringasabytesobject.Defaultencodingis 'utf-8'. errors maybegiventosetadifferenterrorhandlingscheme.Thedefaultfor errors is 'strict',meaningthatencodingerrors raisea UnicodeError.Otherpossiblevaluesare 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' andanyothernameregisteredvia codecs.register_error(),seesection ErrorHandlers.Foralist ofpossibleencodings,seesection StandardEncodings.
Changedinversion3.1: Supportforkeywordargumentsadded.
------------------------------------------------------------------------------------------------------------------------------------------------
解码方法decode()
decode()方法以 encoding 指定的编码格式来解码字符串。
默认编码规则是encoding=‘utf-8’
语法:
bytes.decode(encoding='UTF-8',errors='strict')
参数
bytes是由编码方法encoding()编码转换过后得到的字符串的字节表示值。
encoding--解码时要使用的编码方案,如"UTF-8"。
errors--设置不同错误的处理方案。
默认为'strict',意为编码错误引起一个UnicodeError。
其他可能得值有'ignore','replace','xmlcharrefreplace','backslashreplace'以及通过codecs.register_error()注册的任何值。
返回值:
该方法返回解码后的字符串。
官方文档解释
bytes.decode(encoding="utf-8", errors="strict")bytearray.decode(encoding="utf-8", errors="strict")
Returnastring decodedfromthegivenbytes.Defaultencodingis 'utf-8'. errors maybegiventosetadifferenterrorhandlingscheme.Thedefaultfor errors is 'strict',meaningthatencodingerrorsraise a UnicodeError.Otherpossiblevaluesare 'ignore', 'replace' andanyothernameregisteredvia codecs.register_error(),seesection ErrorHandlers.Foralistofpossibleencodings,seesection Standard Encodings.
Note
Passingthe encoding argumentto str allowsdecodingany bytes-likeobject directly,withoutneedingtomakeatemporarybytesorbytearrayobject.
Changedinversion3.1: Addedsupportforkeywordarguments.
其实编码解码的关系就是如下:
str->bytes:encode编码
bytes->str:decode解码
字符串通过编码成为字节码,字节码通过解码成为字符串。
可以这样解释,编码就是将字符串转换成字节码,涉及到字符串的内部表示。
解码就是将字节码转换为字符串,将比特位显示成字符。
例如:
1>>>text='我是文本'
2>>>text
3'我是文本'
4>>>print(text)
5我是文本
6>>>bytesText=text.encode()
7>>>bytesText
8b'\xe6\x88\x91\xe6\x98\xaf\xe6\x96\x87\xe6\x9c\xac'
9>>>print(bytesText)
10b'\xe6\x88\x91\xe6\x98\xaf\xe6\x96\x87\xe6\x9c\xac'
11>>>type(text)
12
用相对应的解码编码规则来对字符进行处理。
下面给出了几条处理这种错误的方法供参考。
出现如下错误时:
UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xabinposition11126:illegalmultibytesequence
使用python的时候经常会遇到文本的编码与解码问题,其中很常见的一种解码错误如题目所示,下面介绍该错误的解决方法,将‘gbk’换成‘utf-8’也适用。
(1)、首先在打开文本的时候,设置其编码格式,如:open(‘1.txt’,encoding=’gbk’); (2)、若(1)不能解决,可能是文本中出现的一些特殊符号超出了gbk的编码范围,可以选择编码范围更广的‘gb18030’,如:open(‘1.txt’,encoding=’gb18030’); (3)、若(2)仍不能解决,说明文中出现了连‘gb18030’也无法编码的字符,可以使用‘ignore’属性进行忽略,如:open(‘1.txt’,encoding=’gb18030’,errors=‘ignore’);
(4)、还有一种常见解决方法为open(‘1.txt’).read().decode(‘gb18030’,’ignore’)
对于机器学习实战第四章朴素贝叶斯一张代码实现出现的解码错误就用了上面的方法(4)解决了
1defspamTest():
2docList=[];classList=[];fillText=[]
3foriinrange(1,26):
4wordList=textParse(open('D:/machinelearningdata/machinelearninginaction/Ch04/email/spam/%d.txt'%i,encoding='utf-8',errors='ignore').read())
5#print('%dword:'%i)
6docList.append(wordList)
7fillText.extend(wordList)
8classList.append(1)
9wordList=textParse(open('D:/machinelearningdata/machinelearninginaction/Ch04/email/ham/%d.txt'%i,encoding='utf-8',errors='ignore').read())
10docList.append(wordList)
11fillText.extend(wordList)
12classList.append(0)
原文上面代码出现错误是因为在解析ham文件夹文件23.txt时出现解码错误,才导致整个文件运行不了,我们将文件打开的编码方式统一换成'utf-8',并且忽略掉出现的错误便可以正常运行了
参考资料:
1,https://www.cnblogs.com/tingyugetc/p/5727383.html
2,https://blog.csdn.net/shijing_0214/article/details/51971734
posted@
2018-04-1209:57
樟樟22
阅读(20303)
评论(0)
编辑
收藏
举报
刷新评论刷新页面返回顶部
Copyright©2022樟樟22
Poweredby.NET6onKubernetes
延伸文章資訊
- 1Python decode 非法字符
簡單紀錄一下docode. >>> a = "你好" >>> a.encode("utf-8").decode("utf-8", "ignore"). decode 的函數原型是decode([...
- 2python decode errors参数_Garb_v2的博客 - CSDN博客
decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出 ...
- 3python解決漢字編碼問題:Unicode Decode Error | 程式前沿
python解決漢字編碼問題:Unicode Decode Error ... position ordinal not in range 128 UnicodeDecodeError: 'ut...
- 4codecs — Codec registry and base classes — Python 3.10.7 ...
This module defines base classes for standard Python codecs (encoders and ... The default error h...
- 5Python decode()方法 - 菜鸟教程
Python decode() 方法以encoding 指定的编码格式解码字符串。默认编码为字符串编码。 语法. decode()方法语法: str.decode(encoding='UTF-8...