博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 字符串与unicode对象 关于与区别 encode、decode
阅读量:5986 次
发布时间:2019-06-20

本文共 1383 字,大约阅读时间需要 4 分钟。

hot3.png

作者: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 等等)后的存储格式,

  1. 比如,str=‘哈哈’,文件头声明编码为UTF-8, 那么,str里面真正的内容为 '\xe5\x93\x88\xe5\x93\x88’ (可用print repr(str)来查看)
  2. 它仅仅是一个字节流,没有其它的含义,如果你想使这个字节流显示的内容有意义,就必须用正确的编码格式;
  3. 通过decode()接口转变为u’***’,
  4. 想查看str里面的具体内容,使用接口print repr(str) ,str里面存储的内容与项目文件指定的编码有关

##unicode对象 u’****’: 是一个unicode对象, 通过encode()接口转换为str

注:在pycharm等ide 更改文件头编码声明,会影响文件真正的编码存储,可能会影响测试结果

  1. 我推断,print str,能否成功,取决于str里面内容的编码,与文件头声明的编码是否一致
  2. 声明一个str=‘测试’, 那么str里存储的具体内容,取决于 文件头声明的编码格式;(见’测试1’与’测试2’的结果区别)
    即程序会保存该汉字在指定编码里面字符集的字符;
  3. 所以同样的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'
鍝堝搱
注:上面输出了乱码

转载于:https://my.oschina.net/shede333/blog/219789

你可能感兴趣的文章
Office 365 系列之七:安装 Office 365 ProPlus
查看>>
mysql报错问题解决Character set 'utf8mb4' is not a compil
查看>>
菜鸟学Linux 第105篇笔记 海量存储解决
查看>>
nginx HTTP Upstream模块
查看>>
Debug记录:vCenter6.5突然不能访问并报错“503 Service Unavailable”
查看>>
Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化
查看>>
swap脚本命令
查看>>
#24 centos6(RHEL)系列操作系统的启动流程、与命令chkconfig、grub的使用
查看>>
JS实现填报时对修改过的单元格进行标识
查看>>
SVN用户管理脚本(先放添加部分)
查看>>
CArchive串行化操作
查看>>
How to Join the vCSA 6.5 to an Active Directory Domain
查看>>
Ubuntu中如何安装LaTeX宏包
查看>>
Go语言之Doc 文档
查看>>
日志切割工具cronolog yum安装和源码安装和基本使用
查看>>
BootStrap fileinput.js文件上传组件实例代码
查看>>
Linux之磁盘阵列技术详解(一)--raid0创建
查看>>
centos无法创建文件之磁盘空间问题
查看>>
oracle之归档日志是个什么鬼?
查看>>
mysql启动报错 Starting MySQL.. ERROR! The server quit without updating PID file
查看>>