文档章节

Python 字符串与unicode对象 关于与区别 encode、decode

shede333
 shede333
发布于 2014/04/07 18:16
字数 644
阅读 1989
收藏 9

作者:shede333
主页:http://my.oschina.net/shede333 && http://blog.sina.com.cn/u/1509658847
版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | [Creative Commons BY-NC-ND 3.0][]


#Python 字符串与unicode对象 关于与区别 encode、decode

作者:shede333
主页:http://my.oschina.net/shede333
版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | [Creative Commons BY-NC-ND 3.0][]


结合下面的文章的一点理解:
python 中文乱码问题深入分析_python_脚本之家
python的str,unicode对象的encode和decode方法(转) - 不得闲 - 博客园
python编码问题_百度文库

##字符串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'
鍝堝搱
注:上面输出了乱码

© 著作权归作者所有

shede333
粉丝 21
博文 24
码字总数 34658
作品 0
海淀
程序员
私信 提问
加载中

评论(1)

菲戈
菲戈
good
Python 普通str字符串 和 unicode 字符串 及字符串编码探测、转换

本文研究时的环境是CentOS release 6.4,内核版本2.6.32-358.el6.x86_64,python2.6.6 内容:关于字符串的两个魔术方法str() 、unicode() 两个函数str() 、unicode() 类型转换encode 、decod...

tinyhare
2014/07/27
0
0
Python的ASCII, GB2312, Unicode , UTF-8区别

ASCII 是一种字符集,包括大小写的英文字母、数字、控制字符等,它用一个字节表示,范围是 0-127 Unicode分为UTF-8和UTF-16。UTF-8变长度的,最多 6 个字节,小于 127 的字符用一个字节表示,...

长平狐
2013/01/06
813
0
python 的 string 和 PyQt 的 QString 的区别

以下在 Python2.6和PyQt4.4.4 for Python2,6环境下讨论: Python中有两种有关字符的类型:Python string object和Python Unicode object。主要使用Python string object进行数据输入输出。 ...

不必在乎朕是谁
2013/08/26
0
0
python2与python3字符串的区别

python2 在 py2 中,有两种类型字符串:str 和 unicode。但严格的来说,str 并不是完全意义上的字符串,把它称作 字节码串 更合适。unicode 则作为真正意义上的 字符串,但定义时需要使用 u"...

big_cat
2017/11/06
0
0
Python的str和unicode

Python 2和3针对字符串是不一样的。对应关系如下: Python 2.* Python 3.* str unicode bytes str Python3我没有测试,下面主要谈谈Python2上的编码。 Python2中str代表字符串,unicode你懂得...

shawnplaying
2016/12/14
14
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash 和 Python 编程语言优缺点分析

Bash 和 Python 是大多数自动化工程师最喜欢的编程语言。它们都各有优缺点,有时很难选择应该使用哪一个。所以,最诚实的答案是:这取决于任务、范围、背景和任务的复杂性。 让我们来比较一下...

xiangyunyan
19分钟前
3
0
Kubernetes从懵圈到熟练:读懂这一篇,集群节点不下线

排查完全陌生的问题,完全不熟悉的系统组件,是售后工程师的一大工作乐趣,当然也是挑战。今天借这篇文章,跟大家分析一例这样的问题。排查过程中,需要理解一些自己完全陌生的组件,比如sys...

阿里云云栖社区
24分钟前
4
0
解决exe4打包出现的问题

https://blog.csdn.net/gem_yaorao/article/details/48626155

南桥北木
41分钟前
1
0
SpringBoot高级篇JdbcTemplate之数据更新与删除

前面介绍了JdbcTemplate的插入数据和查询数据,占用CURD中的两项,本文则将主要介绍数据更新和删除。从基本使用上来看,姿势和前面的没啥两样 <!-- more --> I. 环境准备 环境依然借助前面一...

小灰灰Blog
57分钟前
3
0
Filecoin 编译问题

https://github.com/filecoin-project/go-filecoin/issues/2503 Error go run ./build build command from root I've faced on this error Building go-filecoin...git log -n 1 --forma......

怎当她临去时秋波那一转
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部