博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对于Python字符编码的理解
阅读量:6287 次
发布时间:2019-06-22

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

hot3.png

首先请理解这句话:对于Python的内建函数encode()和decode()来说,它都是针对字符内存中(用终端所处理字符的内存表示)介于Unicode与指定编码之间的转换。

示例一:

s = '汉字'  # shell终端编码为UTF-8,则s是UTF-8编码的字符s.decode("UTF-8") # 将s通过UTF-8进行解码,得到u'\u6c49\u5b57'# 而对于u'\u6c49\u5b57'的Unicode编码内容,可以通过以下方式再次编码成UTF-8、GBK或者其他编码字符u'\u6c49\u5b57'.encode("UTF-8") # 结果为'\xe6\xb1\x89\xe5\xad\x97',这与repr(s)得到的结果一致,即‘汉字’的UTF-8表示u'\u6c49\u5b57'.encode("gbk") # 得到结果'\xba\xba\xd7\xd6',即‘汉字’的gbk表示

知道上述基本内容,那便可以对Python处理不同编码字符时的本质和现象有个直观都印象。这个直观印象来自于我们直接通过终端进行文本输入时的表现;而涉及字符编码的另一种操作来自于文本读写

再先请参看这篇博文:

这篇博文提到了我们读写文件时的两种方式:通过内建函数open()进行读写;通过codecs模块的open()函数进行读写。这两种方式差别在于前者将编码延迟到由用户自己根据实际编码进行处理,后者则是在open时指定编码进行自动处理。

示例二:

# 以下示例代码来自上述参考博文f = open('test.txt') # 未指定具体编码s = f.read() # 读取到的具体内容与文件的实际编码'A'相关,好比是通过'A'编码环境的终端输入得到的文本f.close()print type(s) # 
# 已知是GBK编码,解码成unicodeu = s.decode('GBK')  # 对字符内容通过文本实际编码(类似终端环境编码)进行解码,得到Unicode编码

示例三:

# 以下示例代码来自上述参考博文import codecsf = codecs.open('test.txt', encoding='UTF-8') # 指定具体编码u = f.read() # 读取到的内容是根据指定编码进行解码后的Unicode字符f.close()print type(u) # 
f = codecs.open('test.txt', 'a', encoding='UTF-8') # 指定具体编码f.write(u) # 写入unicode,中间无需进行自动转换s = '汉' # GBK编码的strprint repr(s) # '\xba\xba'f.write(s) # 写入GBK编码字符,这里会先将GBK编码的str解码为unicode,再编码为UTF-8后进行写入,自动完成f.close()

这些是个人对于Python字符编码的理解,如有不妥之处,还望指教。

补充:

场景:将UTF8编码文件读取的“鸟巢(国家体育场)英文(Bird's Nest)”中括弧中内容提取,结果为:鸟巢英文、国家体育场、Bird's Nest。

问题:利用内置函数open打开文件,for...in...遍历读取到文本行,正则表达式re.compile(r'[((].*?[))]')匹配时却无法匹配到

解决:利用codecs.open()制定编码打开文件,正则表达式改为re.compile(ur'[((].*?[))]'),可正常匹配。

如果文章对你有用,请在收藏之余“顶/赞”一下以示鼓励吧 (/ω\)

转载于:https://my.oschina.net/iuranus/blog/262914

你可能感兴趣的文章
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>