作者:shede333
&& 版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | [Creative Commons BY-NC-ND 3.0][]#Python 字符串与unicode对象 关于与区别 encode、decode
作者:shede333
版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | [Creative Commons BY-NC-ND 3.0][]结合下面的文章的一点理解:
##字符串str:
是一个字节数组, 是对unicode对象,编码encode(utf-8,gbk,GB2312 等等)后的存储格式,- 比如,str=‘哈哈’,文件头声明编码为UTF-8, 那么,str里面真正的内容为 '\xe5\x93\x88\xe5\x93\x88’ (可用print repr(str)来查看)
- 它仅仅是一个字节流,没有其它的含义,如果你想使这个字节流显示的内容有意义,就必须用正确的编码格式;
- 通过decode()接口转变为u’***’,
- 想查看str里面的具体内容,使用接口print repr(str) ,str里面存储的内容与项目文件指定的编码有关
##unicode对象 u’****’: 是一个unicode对象, 通过encode()接口转换为str
注:在pycharm等ide 更改文件头编码声明,会影响文件真正的编码存储,可能会影响测试结果
- 我推断,print str,能否成功,取决于str里面内容的编码,与文件头声明的编码是否一致
- 声明一个str=‘测试’, 那么str里存储的具体内容,取决于 文件头声明的编码格式;(见’测试1’与’测试2’的结果区别) 即程序会保存该汉字在指定编码里面字符集的字符;
- 所以同样的str=‘测试’声明,不同的文件头-编码,repr(str)会输出不同的内容
##开始测试验证
测试环境 Mac OS 10.9 , Pycharm 3.0.2
###测试1.
#_*_ coding:GBK _*_print '哈哈'.decode('gbk')print repr('哈哈’)
输出:
哈哈 '\xb9\xfe\xb9\xfe’###测试2.
#_*_ coding:UTF-8 _*_print '哈哈'.decode('utf-8')print repr('哈哈’)
输出:
哈哈 '\xe5\x93\x88\xe5\x93\x88'###测试3.
文件头 #_*_ coding:GBK _*_print repr('哈哈’)print '哈哈'.decode(‘utf-8')
输出:
'\xb9\xfe\xb9\xfe’ UnicodeDecodeError: 'utf8' codec can't decode byte 0xb9 in position 0: invalid start byte###测试4.
#_*_ coding:UTF-8 _*_print repr('哈哈’)print '哈哈'.decode('gbk')
输出:
'\xe5\x93\x88\xe5\x93\x88' 鍝堝搱注:上面输出了乱码