python的平台编码、默认编码、解码直接的联系的一些个人理解
2018-01-18 22:56
393 查看
python的平台编码、默认编码、解码直接的联系的一些个人理解
以下只是个人的一些个人悟出的一些想法,不能确定一定是准确的,如果有理解错误的地方,希望有人帮忙指正
1、运行decode指定编码A的函数时(decode(“A”)),如果字符串不是“A”编码格式的话,先用sys模块下默认编码B解码成unicode,然后再编码成编码“B”的格式。然后再用decode去解码;如果字符串是“A”编码格式的话,就直接decode 解码
2、运行encode成指定的编码“A"时。先用sys模块下默认编码B解码成unicode,然后再用encode函数编码成指定的编码“A”。
举例如下:
例子1 :当前sys模块的默认是utf-8格式,但dos平台是gbk编码,
>>> sys.setdefaultencoding("utf-8")
>>> u"中国".decode("utf-8").encode("gbk")
'\xd6\xd0\xb9\xfa'
>>> u"中国".decode("utf-8").encode("utf-8")
'\xe4\xb8\xad\xe5\x9b\xbd'
>>> (u"中国").decode("utf-8")
u'\u4e2d\u56fd'
>>> u"中国".decode("gbk")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal mult
ibyte sequence
>>> "中国".decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd6 in position 0: invalid c
ontinuation byte
>>> "中国".encode("gbk")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd6 in position 0: invalid c
ontinuation byte
>>> "中国".decode("gbk")
u'\u4e2d\u56fd'
>>>
以上运行结果,个人理解是:
(1)前面不报错的原因u"中国"是unicode编码,然后先用sys模块默认的utf-8编码成utf-8格式,然后decode就没有问题了
(2)u"中国".decode("gbk")报错原因:sys模块默认的utf-8编码成utf-8格式,然后用gbk去解码就报错了
(3) "中国".decode("utf-8")报错的原因:dos平台的默认编码格式是gbk,因此无法用sys模块默认的utf-8格式去解码。所以报错
(4)"中国".decode("gbk")运行正确,是因为dos平台就是gbk编码,以此“中国”是gbk编码。所以直接可以用decode("gbk")去解码
例子2:sys模块的默认编码格式和dos环境的默认编码格式都是"gbk"情况
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding("gbk")
>>> u"中国".decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd6 in position 0: invalid
ontinuation byte
>>> u"中国".decode("gbk")
u'\u4e2d\u56fd'
以上运行结果,个人理解是:
(1)u"中国".decode("utf-8") 报错原因:用sys默认的gbk把u"中国"编码成了gbk格式,因此无法用utf8区解码
(2)u"中国".decode("gbk")不报错:因为用sys默认的gbk把u"中国"编码成了gbk格式
以下只是个人的一些个人悟出的一些想法,不能确定一定是准确的,如果有理解错误的地方,希望有人帮忙指正
1、运行decode指定编码A的函数时(decode(“A”)),如果字符串不是“A”编码格式的话,先用sys模块下默认编码B解码成unicode,然后再编码成编码“B”的格式。然后再用decode去解码;如果字符串是“A”编码格式的话,就直接decode 解码
2、运行encode成指定的编码“A"时。先用sys模块下默认编码B解码成unicode,然后再用encode函数编码成指定的编码“A”。
举例如下:
例子1 :当前sys模块的默认是utf-8格式,但dos平台是gbk编码,
>>> sys.setdefaultencoding("utf-8")
>>> u"中国".decode("utf-8").encode("gbk")
'\xd6\xd0\xb9\xfa'
>>> u"中国".decode("utf-8").encode("utf-8")
'\xe4\xb8\xad\xe5\x9b\xbd'
>>> (u"中国").decode("utf-8")
u'\u4e2d\u56fd'
>>> u"中国".decode("gbk")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal mult
ibyte sequence
>>> "中国".decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd6 in position 0: invalid c
ontinuation byte
>>> "中国".encode("gbk")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd6 in position 0: invalid c
ontinuation byte
>>> "中国".decode("gbk")
u'\u4e2d\u56fd'
>>>
以上运行结果,个人理解是:
(1)前面不报错的原因u"中国"是unicode编码,然后先用sys模块默认的utf-8编码成utf-8格式,然后decode就没有问题了
(2)u"中国".decode("gbk")报错原因:sys模块默认的utf-8编码成utf-8格式,然后用gbk去解码就报错了
(3) "中国".decode("utf-8")报错的原因:dos平台的默认编码格式是gbk,因此无法用sys模块默认的utf-8格式去解码。所以报错
(4)"中国".decode("gbk")运行正确,是因为dos平台就是gbk编码,以此“中国”是gbk编码。所以直接可以用decode("gbk")去解码
例子2:sys模块的默认编码格式和dos环境的默认编码格式都是"gbk"情况
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding("gbk")
>>> u"中国".decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd6 in position 0: invalid
ontinuation byte
>>> u"中国".decode("gbk")
u'\u4e2d\u56fd'
以上运行结果,个人理解是:
(1)u"中国".decode("utf-8") 报错原因:用sys默认的gbk把u"中国"编码成了gbk格式,因此无法用utf8区解码
(2)u"中国".decode("gbk")不报错:因为用sys默认的gbk把u"中国"编码成了gbk格式
相关文章推荐
- python默认编码与解码格式设置
- python 默认编码的理解与设置
- Python2.7 编码与解码理解
- python2.x编码的一些理解
- 关于python编码的一些理解
- 关于Python2/3多进程的一些个人理解
- 关于python锁的一些个人理解
- python之字符编码解码
- JavaScript实现的base62 encode/decode,用于页面上直接对作为参数传递的url本身的编码和解码。
- 设置python的默认编码为utf8
- Python 2.7.9 Demo - JSON的编码、解码
- 分析:windows下cmd默认的编码是ASCII编码 ,windows的中文环境下编码是GBK 方法一:在保存输出流保存的时候做一个对文字GBK编码,在输出到文件 如下 [python] view
- python scrapy爬虫框架概念介绍(个人理解总结为一张图)
- python 实现的huffman 编码压缩,解码解压缩
- python中base64编码与解码
- Python设置默认编码为UTF-8
- Python设置系统默认编码
- Python字符串的编码与解码(encode与decode)
- 设置python的默认编码为utf8
- Mac平台上Python的MySQLdb库的使用及数据库简单概念理解