python 字符串对象与编码

Woody
Woody
Woody
2
文章
0
评论
3月 8, 201620:30:02
评论
python中有两种字符串对象,即str和unicode。
一个简单的演示:
s1 = 'abcdefg'
u1 = u'abcdefg'
print s1
print u1
type(s1)
type(u1)
返回得到:
abcdefg
abcdefg
<type 'str'>
<type 'unicode'>
可见,虽然s1和u1两个变量看似内容和输出一致,但是类型却完全不同。
它们二者的方法适用性也可能完全不同。当有报错提示,
ValueError: Expected a bytes object, not a unicode object
说明不能传入unicode对象,需要将unicode转换为str对象.

str和unicode互相转换

python内部常用unicode对象处理,比如io.read()方法返回的即为unicode对象,往往需要将其转换为str对象。有时也需要将str转换为unicode对象。仍以上述为例

str转换为unicode
u2 = s1.decode()
type(u2)
返回
<type 'unicode'>
unicode转换为str
s2 = u1.encode()
type(s2)
返回
<type 'str'>
注意,这里decode和encode方法没有传入编码参数,表示默认为“ASCII”编码。如果涉及到中文,常用的还有utf-8、gbk编码格式。
一个编码算例
例如,读取一个原始编码为utf-8的html文件,并转换为str对象
import io
with io.open('test.html', 'r') as file:
html = file.read()
print type(html)
html = html.encode('utf-8')
print type(html)
返回
<type 'unicode'>
<type 'str'>
关于print输出结果
文首算例中,为什么两个完全不同的对象,print出来的结果完全一致?
参照print函数说明文档:
“``print`` evaluates each expression in turn and writes the resulting

object to standard output (see below).  If an object is not a string,
it is first converted to a string using the rules for string

conversions.......”
简单地说就是
print 函数默认输出返回值的字符串格式,如果返回的不是字符串,它会将其转换为字符串格式。简单理解:
function print(x):
#演示代码仅供理解,实际并非如此
return str(x)
所以,print返回的是转换为字符串后的结果,导致输出看起来是一样的,但实际上是完全不同的。
如何识别str对象的编码
chardet一款常用的识别编码的开源库(https://pypi.python.org/pypi/chardet)
安装
pip install chardet
识别
import chardet
str = 'good'
chardet.detect(str)

 

weinxin
我的微信公众号
分享科研软件、科研方法,为你的科研助力。
Woody
  • 本文由 发表于 3月 8, 201620:30:02
  • 转载请务必保留本文链接:https://www.sciencesoft.cn/python-string-object/
Win10安装Visual Basic 6.0教程 编程软件

Win10安装Visual Basic 6.0教程

注:若Win10系统安装到第13步(或之后)出现无响应情况,请确保此状况出现时间长于一分钟,再打开任务管理器强制关闭安装程序即可,此时程序其实已成功安装到电脑上; 安装步骤: 1.右击软件压缩包,选择...
Matlab关联问题 编程软件

Matlab关联问题

每次双击.m文件都会自动打开一个matlab程序,而不是在已经打开的Matlab中打开,这样导致操作起来有点慢,解决方法如下: step1:下载这个文件 http://pan.baidu.com/s/...
Fortran 语法备忘录 (高级) 编程软件

Fortran 语法备忘录 (高级)

混合语言编程  Mixed-Language-Programming 用Fortran调用C++语言的程序 例如一个简单的C++语言程序,求直角三角形斜边长度的达哥拉斯公式:保存为crout.cpp文...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: