【www.5929.com】与错误处理UnicodeDecodeError

描述

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-捌。
  • 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() 注册的此外值。

返回值

该格局重返编码后的字符串,它是2个 bytes 对象。

3.参数

encoding — 要动用的编码,如: UTF-八。
errors — 设置差异错误的处理方案。默感觉’strict’,意为编码错误引起二个UnicodeError。 别的大概得值有 ‘ignore’,
‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过
codecs.register_【www.5929.com】与错误处理UnicodeDecodeError。error() 注册的别样值。


3.参数

encoding — 要使用的编码,如”UTF-八”。
errors — 设置差异错误的处理方案。默以为’strict’,意为编码错误引起二个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

 

【www.5929.com】与错误处理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-八’

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 解码: 菜鸟教程

语法

  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-八’的编码规则进行的解码,所以会导致解码失利,即‘utf-八’不能够解码‘gbk’编码规则的字节。用相呼应的解码编码规则来对字符进行处理。上面给出了几条处理那种不当的措施供参考。

出现如下错误时:

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

使用python的时候平常会遇见文件的编码与解码难点,当中很普及的一种解码错误如题目所示,上面介绍该错误的消除方法,将‘gbk’换到‘utf-捌’也适用。 
(一)、首先在开采文本的时候,设置其编码格式,如:open(‘1.txt’,encoding=’gbk’); 
(二)、若(一)不能够化解,恐怕是文本中冒出的某些特殊符号高出了gbk的编码范围,能够挑选编码范围更广的‘gb18030’,如:open(‘1.txt’,encoding=’gb18030’); 
(叁)、若(2)仍无法消除,表达文中出现了连‘gb18030’也无从编码的字符,能够运用‘ignore’属性实行忽略,如:open(‘一.txt’,encoding=’gb18030’,errors=‘ignore’); 

(四)、还有一种常见化解方法为open(‘1.txt’).read().decode(‘gb18030’,’ignore’)

 

对于机械学习实战第4章朴素贝叶斯一张代码完毕产出的解码错误就用了地点的点子(4)消除了

 

 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文件夹文件贰三.txt时出现解码错误,才导致整个文件运维不了,我们将文件展开的编码格局统壹换到‘utf-八’,并且忽略掉出现的不当便足以平常运作了

www.5929.com,参考资料:

 
1,

 
2,

 

 

Leave a Comment.