`
姜太公
  • 浏览: 73847 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Python2.x中字符串编码和解码

阅读更多

<!----><!----> <!---->

Python2.x 中,没有字节的概念(Python3中出新了bytes),只有两种字符串:表示 str unicode 。使用引号定义字符串时,默认定义成一个str字符串。加前缀u表示这是一个Unicode字符串。

 

可以把 str 的单位看做一个字节,把 unicode 的单位看作一个字符。在交互命令界面下

 

>>> t = '你好'
>>> t
'\xc4\xe3\xba\xc3'
>>> t[0]
'\xc4'
>>> print t[0]

>>> t = u'你好'
>>> t
u'\u4f60\u597d'
>>> t[0]
u'\u4f60'
>>> print t[0]
你
>>>

 所以处理中文时最好使用Unicode字符串,可以对每个汉字进行处理。

 

还要注意,上面把'你好'作为str表示时,它的值是

'\xc4\xe3\xba\xc3'

这其实是汉字你好的gb编码,因为我用的windows xp系统的默认编码是gbk,所以在控制台里输入的汉字也是gbk编码的。

 

Python提供了encode()和decode()这两个方法供我们进行编码转换。由于Python内部是Unicode表示的,所以这两个方法都和Unicode有关。

 

s.decode()是把str字符串s解码成Unicode字符串,注意如果s不是str字符串(那么它就是Unicode字符串),调用这个方法可能 会出错。使用这个函数,你要指定s的编码方式,比如我要把上面的’你好‘转换成Unicode编码,需要这样

>>> '你好'.decode('gbk')
u'\u4f60\u597d'
>>>

 结果返回一个Unicode表示的’你好‘

s.encode()把Unicode字符串编码成另外一种编码的ascii字符串。s这时候必须是一个Unicode字符串,否则可能 出错。

>>> u'你好'.encode('gbk')
'\xc4\xe3\xba\xc3'
>>>

 结果返回一个str字符串表示的’你好‘。

利用encode和decode就可以实现任意编码之间转换。

 

代码文件中的字符串默认是和代码文件本身的编码一致。文件test.py,编码为gbk

#-*-coding:gbk-*-
t = '你好'
x = u'你好'

 那么t的编码是gbk,而x的编码是Unicode,x的编码与文件编码无关。

 

4
0
分享到:
评论

相关推荐

    Python常用base64 md5 aes des crc32加密解密方法汇总

    Python内置的base64模块可以实现base64、base32、base16、base85、urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形式,2.x可以是字符串形式。 base64模块的base64编码、解码调用了binascii模块,...

    Python中文件I/O高效操作处理的技巧分享

    如何读写文本文件?...python2.x 写入文件前对 unicode 编码,读入文件后对二进制字符串解码 &gt;&gt;&gt; f = open('py2.txt', 'w') &gt;&gt;&gt; s = u'你好' &gt;&gt;&gt; f.write(s.encode('gbk')) &gt;&gt;&gt; f.close() &gt;&gt;&gt; f = open('py2.txt',

    python的一些加密方法及python 加密模块

    Python内置的base64模块可以实现base64、base32、base16、base85、urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形式,2.x可以是字符串形式。 base64模块的base64编码、解码调用了binascii模块,...

    python用于url解码和中文解析的小脚本(python url decoder)

    python print(repr(“测试报警,xxxx是大猪头”.decode(“UTF8”).encode(“GBK”)).replace(“\\x”,”%”)) 注意第一个 decode(“UTF8”) 要与文件声明的编码一样。 最开始对这个问题的接触,来自于一个...

    freemarker总结

    其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替&gt;会有更好的效果,因为 FreeMarker会把&gt;解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:(x&gt;y)&gt; ...

    leetcode2sumc-LeetCode:力码

    leetcode 2 和 c 力码 这是我对 LeetCode 挑战的解决方案。...反转字符串中的单词 解码字符串 —— 传入: 之字形转换 通配符匹配 包含重复项 III 任务计划程序 质数回文 独特的路径 III 按位与等于零的三元组

    simple-web-server

    使用REST API测试模型功能如果输入是字符串列表,则应将其编码为单个字符串,然后在自定义函数中对其进行解码。 预定义的模型接口仅接受单个输入字符串。 curl -i -X POST -H 'Content-Type: application/json' -d '...

    simple-webserver

    使用REST API测试模型功能如果输入是字符串列表,则应将其编码为单个字符串,然后在自定义函数中对其进行解码。 预定义的模型接口仅接受单个输入字符串。 curl -i -X POST -H 'Content-Type: application/json' -d '...

    WEB渗透测试数据库

    其中auto方式会自动检测url类型、hex类型的字符串并进行解码 非ASCII编码*-m/--method*支持: utf8 gbk gb2312 big5 utf16 utf7 等所有python支持的编码方式,具体请参考如下链接: python支持的编解码格式 ...

    编码总结

    目录爬虫编码总结原因解决方案非正规解决方案python上的一些总结中文用 unicode 表示总结编码与解码decode解码encode编码raw_input相等陷阱小记编码错误问题Illegal Multibyte SequenceInvalid Start Byte总结 ...

    Fingercomp程序:Fingercomp的OpenComputers程序

    libsemver 最初用Python编写的语义版本字符串解析器的MoonScript端口。 libaevent 高级事件库。 libder-decoder 解码使用专有编码规则(ASN.1的子集)编码的数据。 例如,x.509证书。 libcsv CSV解析器。 ...

Global site tag (gtag.js) - Google Analytics