与错误处理UnicodeDecodeError

by admin on 2019年4月7日

描述

encode()
方法以钦赐的编码格式编码字符串。errors参数能够钦赐不一样的错误处理方案。



编码方法encoding()

语法

encode()方土耳其语法:

str.encode(encoding='UTF-8',errors='strict')
1.描述

encode()
方法以钦定的编码格式编码字符串。errors参数能够钦定分裂的错误处理方案。


1.描述

decode() 方法以钦赐的编码格式解码 bytes 对象。默许编码为 ‘utf-八’。


描述

  encode()
方法以钦点的编码格式编码字符串,暗中同意编码为
‘utf-八’。将字符串由string类型变成bytes类型。

  对应的解码方法:bytes
decode() 
方法。

参数

  • encoding — 要采取的编码,如: UTF-8。
  • errors — 设置分化错误的拍卖方案。暗中认可为
    ‘strict’,意为编码错误引起一个UnicodeError。 别的恐怕得值有 ‘ignore’,
    ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过
    codecs.register_error() 注册的任何值。
2.语法
str.encode(encoding='UTF-8',errors='strict')

2.语法
bytes.decode(encoding="utf-8", errors="strict")

语法

str.encode([encoding``=``'utf-8'``][,errors``=``'strict'``])

  • str是意味须要编码的字符串,并且是个string类型。
  • encoding
    — 可选参数,要选择的编码方案,暗中同意编码为 ‘utf-八’。
  • errors —
    可选参数,设置不一样错误的处理方案。私下认可为
    ‘strict’,意为编码错误引起一个UnicodeError。 其余可能得值有 ‘ignore’,
    ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及由此codecs.register_error() 注册的其他值。

返回值

该措施再次来到编码后的字符串,它是多个 bytes 对象。

3.参数

encoding — 要利用的编码,如: UTF-八。
与错误处理UnicodeDecodeError。errors — 设置差异错误的拍卖方案。暗中认可为
‘strict’,意为编码错误引起二个UnicodeError。 别的也许得值有 ‘ignore’,
‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及经过
codecs.register_error() 注册的别样值。


3.参数

encoding — 要接纳的编码,如”UTF-八”。
errors — 设置分歧错误的处理方案。默许为
‘strict’,意为编码错误引起3个UnicodeError。 其余可能得值有 ‘ignore’,
‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及由此codecs.register_error() 注册的别的值。


返回值

  该措施重回编码后的字符串,它是三个bytes 对象,那个字节对象是用于上面包车型大巴解码用的。

实例

以下实例显示了encode()方法的实例:

#!/usr/bin/python3

str = "菜包python";
str_utf8 = str.encode("UTF-8")
str_gbk = str.encode("GBK")

print(str)

print("UTF-8 编码:", str_utf8)
print("GBK 编码:", str_gbk)

print("UTF-8 解码:", str_utf8.decode('UTF-8','strict'))
print("GBK 解码:", str_gbk.decode('GBK','strict'))

上述实例输出结果如下:

菜包python
UTF-8 编码: b'\xe8\x8f\x9c\xe5\x8c\x85python'
GBK 编码: b'\xb2\xcb\xb0\xfcpython'
UTF-8 解码: 菜包python
GBK 解码: 菜包python

 

与错误处理UnicodeDecodeError。4.返回值

该形式再次来到编码后的字符串,它是三个 bytes 对象。


4.返回值

该措施重回解码后的字符串。


合法文书档案解释:

str.``encode(encoding=”utf-8″errors=”strict”)

  Return an encoded version of the string as a bytes object.
Default encoding is 'utf-8'errors may be given to set a different
error handling scheme. The default for errors is 'strict', meaning
that encoding errors   raise
UnicodeError.
Other possible values
are 'ignore''replace''xmlcharrefreplace''backslashreplace' and
any other name registered
via codecs.register_error(),
see section Error
Handlers.
For a list   of possible encodings, see section Standard
Encodings.

  Changed in
version 3.1: Support for keyword arguments added.


解码方法decode()

  decode()
方法以 encoding 钦定的编码格式来解码字符串。暗中同意编码规则是encoding=‘utf-8’

5.实例
str = "菜鸟教程";
str_utf8 = str.encode("UTF-8")
str_gbk = str.encode("GBK")

print(str)

print("UTF-8 编码:", str_utf8)
print("GBK 编码:", str_gbk)

print("UTF-8 解码:", str_utf8.decode('UTF-8','strict'))
print("GBK 解码:", str_gbk.decode('GBK','strict'))

结果

菜鸟教程
UTF-8 编码: b'\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b'
GBK 编码: b'\xb2\xcb\xc4\xf1\xbd\xcc\xb3\xcc'
UTF-8 解码: 菜鸟教程
GBK 解码: 菜鸟教程
5.实例
str = "菜鸟教程";
str_utf8 = str.encode("UTF-8")
str_gbk = str.encode("GBK")

print(str)

print("UTF-8 编码:", str_utf8)
print("GBK 编码:", str_gbk)

print("UTF-8 解码:", str_utf8.decode('UTF-8','strict'))
print("GBK 解码:", str_gbk.decode('GBK','strict'))

结果

菜鸟教程
UTF-8 编码: b'\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b'
GBK 编码: b'\xb2\xcb\xc4\xf1\xbd\xcc\xb3\xcc'
UTF-8 解码: 菜鸟教程
GBK 解码: 菜鸟教程

语法

bf88必发唯一官网 ,  bytes.decode(encoding=’UTF-8′,errors=’strict’)

参数

  bytes是由编码方法encoding()编码转换之后得到的字符串的字节表示值。

  encoding —
解码时要动用的编码方案,如”UTF-八”。

  errors —
设置差别错误的拍卖方案。暗中同意为
‘strict’,意为编码错误引起一个UnicodeError。 其余大概得值有 ‘ignore’,
‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及经过
codecs.register_error() 注册的其余值。

返回值:

  该方法再次回到解码后的字符串。

法定文书档案解释

bytes.``decode(encoding=”utf-8″errors=”strict”)bytearray.``decode(encoding=”utf-8″errors=”strict”)

  Return a string decoded from the given bytes. Default encoding
is 'utf-8'errors may be given to set a different error handling
scheme. The default for errors 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 Error
Handlers.
For a list of possible encodings, see section Standard      
Encodings.

  Note

  Passing the encoding argument
to str allows
decoding any bytes-like
object directly,
without needing to make a temporary bytes or bytearray object.

  Changed in
version 3.1: Added support for keyword arguments.

其实编码解码的涉及便是之类:

 

str->bytes:encode编码

bytes->str:decode解码  

 

字符串通过编码成为字节码,字节码通过解码成为字符串。可以这样解释,编码就是将字符串转换成字节码,涉及到字符串的内部表示。解码就是将字节码转换为字符串,将比特位显示成字符。

 

 例如:

 1 >>> text = '我是文本'
 2 >>> text
 3 '我是文本'
 4 >>> print(text)
 5 我是文本
 6 >>> bytesText = text.encode()
 7 >>> bytesText
 8 b'\xe6\x88\x91\xe6\x98\xaf\xe6\x96\x87\xe6\x9c\xac'
 9 >>> print(bytesText)
10 b'\xe6\x88\x91\xe6\x98\xaf\xe6\x96\x87\xe6\x9c\xac'
11 >>> type(text)
12 <class 'str'>
13 >>> type(bytesText)
14 <class 'bytes'>
15 >>> textDecode = bytesText.decode()
16 >>> textDecode
17 '我是文本'
18 >>> print(textDecode)
19 我是文本

例2

 1 >>>text='我好吗'
 2 >>>byteText=text.encode('gbk')
 3 >>>byteText
 4  b'\xce\xd2\xba\xc3\xc2\xf0'
 5 >>>strText=byteText.decode('gbk')
 6 >>>strText
 7  '我好吗'
 8 >>>byteText.decode('utf-8')
 9 Traceback (most recent call last):
10   File "G:\softs\Anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code
11     exec(code_obj, self.user_global_ns, self.user_ns)
12   File "<ipython-input-11-f0ef1443f388>", line 1, in <module>
13     byteText.decode('utf-8')
14 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation byte

 

上面的第十行现身了不当,是出于文本text=’小编可以吗’,是比照‘gbk’进行编码的,而在解码时是依据‘utf-8’的编码规则进行的解码,所以会造成解码战败,即‘utf-八’不能够解码‘gbk’编码规则的字节。用相呼应的解码编码规则来对字符进行处理。上面给出了几条处理那种张冠李戴的不二秘籍供参考。

出现如下错误时:

UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xab in position 11126: illegal multibyte sequence

运用python的时候时不时会遇上文件的编码与解码难点,在那之中很普遍的1种解码错误如标题所示,上边介绍该错误的缓解方式,将‘gbk’换到‘utf-八’也适用。 
(1)、首先在开拓文本的时候,设置其编码格式,如:open(‘壹.txt’,encoding=’gbk’); 
(二)、若(壹)无法消除,也许是文件中出现的有的特殊符号超出了gbk的编码范围,能够接纳编码范围更广的‘gb18030’,如:open(‘1.txt’,encoding=’gb18030’); 
(3)、若(贰)仍无法化解,表明文中出现了连‘gb18030’也无法编码的字符,能够选取‘ignore’属性进行忽略,如:open(‘1.txt’,encoding=’gb18030’,errors=‘ignore’); 

(4)、还有一种常见消除办法为open(‘一.txt’).read().decode(‘gb18030’,’ignore’)

 

对此机械学习实战第四章朴素贝叶斯一张代码完毕产出的解码错误就用了地方的章程(肆)消除了

 

 1 def spamTest():
 2     docList=[];classList=[];fillText=[]
 3     for i in range(1,26):
 4         wordList=textParse(open('D:/machinelearning data/machinelearninginaction/Ch04/email/spam/%d.txt' % i,encoding='utf-8',errors='ignore').read())
 5        # print('%d word:'%i)
 6         docList.append(wordList)
 7         fillText.extend(wordList)
 8         classList.append(1)
 9         wordList = textParse(open('D:/machinelearning data/machinelearninginaction/Ch04/email/ham/%d.txt' % i,encoding='utf-8',errors='ignore').read())
10         docList.append(wordList)
11         fillText.extend(wordList)
12         classList.append(0)

原著上面代码出现谬误是因为在解析ham文件夹文件2叁.txt时现身解码错误,才致使整个文件运维不了,大家将文件打开的编码格局统1换来‘utf-8’,并且忽略掉出现的不当便足以寻常运行了

参考资料:

 
1,

 
2,

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图