python 字符串 编码 解码_Python 字符串编解码研究
Python 2.X 在输入汉字和特殊字符的时候,经常遇到编码解码的问题,究其原因,编译器默认将文件当做ascii编码,因此要正确的实现编解码的转换,需要进行一些设置。
首先让我们来了解几个概念。
文件编码、字符串编码、系统编码
代码中字符串的默认编码与代码文件本身的编码一致。
举个例子,如果是在utf8的文件中,那么字符串就是utf8编码;如果是在gb2312的文件中,则其编码为gb2312。 但是,如果指明了字符串为unicode字符串,那么就是unicode编码。
代码文件的默认编码与系统编码一致,因此如果不指定文件的编码,那么默认的编码格式就是系统编码。 那么如何查看系统编码?
env |grep -i lang
或者,在交互式python命令行下,执行如下命令:
import sys
sys.getdefaultencoding()
输出一般都是ascii,系统编码一般是utf8,所以需要先把二者统一。
如何设置编码
方法1
在python文件开头加上# –– coding: utf-8 –– 来识别中文并能够把中文正确的转换为unicode。
方法2
修改python的默认系统编码
>>> import sys,locale
>>> sys.getdefaultencoding()
'ascii'
>>> sys.setdefaultencoding() #这里会报错,找不到setdefaultencoding()函数
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'module' object has no attribute 'setdefaultencoding'
>>> reload(sys) #需要reload。
>>> locale.getdefaultlocale()
('zh_CN', 'UTF-8')
>>> sys.setdefaultencoding("UTF-8") #把编码与操作系统统一起来
>>> sys.getdefaultencoding()
'UTF-8'
之所以要reload(sys),因为python环境在初始化的时候要执行site.py这个文件,而为了防止用户修改python的默认编码,在site.py文件中会把setdefaultencoding()函数del 掉,因此我们必须通过reload(sys)把这个函数找回来。 有兴趣的不妨自己试一下:
先rpm -qa|grep python26 找到python的包
然后rpm -q -l python26-2.6.8-1.el5|grep site.py 找到site.py文件的位置
我的机器上是:/usr/lib64/python2.6/site.py
vi打开,main函数里面,有一段:
if ENABLE_USER_SITE:
execusercustomize()
# Remove sys.setdefaultencoding() so that users cannot change the
# encoding after initialization. The test for presence is needed when
# this module is run as a script, because this code is executed twice.
if hasattr(sys, "setdefaultencoding"):
del sys.setdefaultencoding
重新reload一下sys,把setdefaultencoding函数给找回来。再setdefaultencoding就对了。
编码与解码
环境设置正确后,就可以进行编码转换了。python中的编码转换用decode和encode来实现,unicode编码可以认为是各种编码之间转换的桥梁。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码,因此,如果str1本身不是gb2312编码,就会报错。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码,因此,需要str2本身的编码是unicode。
总结一下,
u.encode(‘…’)基本上总是能成功的,只要你填写了正确的目标编码。这就像任何文件都可以压缩成zip文件,是一个道理。
s.decode(‘…’)经常会出错,因为s是什么“编码”取决于上下文,当你解码的时候需要确保s是用什编码。就像打开zip文件的时候,你要确保它确实是zip文件,而不仅仅是伪造了扩展名的zip文件。
Python3中,已经默认采用utf8编码了。
Python 的详细介绍:请点这里
Python 的下载地址:请点这里
python 字符串 编码 解码_Python 字符串编解码研究相关推荐
- python查看字符串编码方式_Python字符编码判断方法分析
本文实例讲述了Python字符编码判断方法.分享给大家供大家参考,具体如下: 方法一: isinstance(s, str) 用来判断是否为一般字符串 isinstance(s, unicode) 用 ...
- c int转字符串_【C++实现python字符串函数库】字符串匹配函数startswith与endswith
[C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...
- Python - 字符串编解码
文章目录 关于编解码 编码的种类 代码实现编解码 常用字符串--字节转换 字节样式字符串 编解码 url 编解码 字节相加 关于编解码 编码/解码本质上是一种映射 字符a 用 ascii 编码则是65 ...
- Python进阶8——字典与散列表,字符串编解码
Python用散列表来实现字典,散列表就是稀疏数组(数组中有空白元素),散列表中的元素叫做表元,字典的每个键值对都占用一个表元,一个表元分成两个部分,一个是对键的应用,另一个是对值的引用,因为表元的大 ...
- python字符编码讲解_python 字符编码讲解
ASCII控制字符 Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...
- 字符编码在python中的处理_python 字符编码处理问题总结
Python中常常遇到这种字符编码问题,尤其在处理网页源代码时(特别是爬虫中): UnicodeDecodeError: 'XXX' codec can't decode bytes in posit ...
- 韩文编码python_python中的字符串编码问题——4.unicode编解码(以实际工作中遇到的韩文编码为例)...
韩文unicode编解码 问题是这样,工作中遇到有韩文数据出现乱码,说是unicode码. 类似这样: id name323 52186863 149 63637538 314 65516863 32 ...
- python编码格式有哪些_Python JSON编解码的方式有哪些
Python JSON编解码的方式有哪些 发布时间:2020-11-04 17:52:46 来源:亿速云 阅读:92 今天就跟大家聊聊有关Python JSON编解码的方式有哪些,可能很多人都不太了解 ...
- python网址编码转换_python字符串与url编码的转换实例
python字符串与url编码的转换实例 更新时间:2018年05月10日 10:27:46 作者:Tangzongyu123 今天小编就为大家分享一篇python字符串与url编码的转换实例,具有很 ...
最新文章
- 4个mos管驱动的全桥电路原理_电源转压电路设计基础
- HTML+CSS实例——漂亮的查询部件(一)
- 获取IOS应用的子目录
- 手动爬虫之流程笔记1(python3)
- codeforces 962E Byteland, Berland and Disputed Cities 最小生成树变形
- 在Salesforce中调用外部系统所提供的的Web Service
- CAN总线技术在船舶监控系统的应用
- yshon对讲机如何调频率_窄带宽、窄脉宽、高重复频率,主动调Q光纤激光器是如何实现的?...
- NeurIPS 2020 | 微软亚洲研究院论文摘录之目标检测篇
- Python 关键词触发的魔法方法
- 如果重新设计网络,有没有可能合并IP地址跟MAC地址?
- “安装程序无法定位现有系统分区,也无法创建新的系统分区”提示
- .net面向对象学习笔记
- Android UI开发第三十九篇——Tab界面实现汇总及比较
- 自动化测试和手工测试结果汇总小实践
- cefsharp作为采集工具(学习笔记)
- 一种简单的图像显著性计算模型
- 【docker】docker的简单状态监控
- 地理加权归回模型 (GWR) 参数估计
- python数字转对应中文_python英文数字到中文数字的转换
热门文章
- nginx 配置文件 linux,Linux-nginx.conf配置文件模板
- python3反爬虫原理与绕过实战 网盘_Python 3反爬虫原理与绕过实战
- python mock_Python中使用mock.Mock()进行mock测试
- video 属性和事件用法大全
- Some Essential JavaScript Questions And Answers(6)
- 理解Event的冒泡模型
- Shoutem旨在成为React Native移动应用领域的WordPress
- js立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( )) 有区别?
- 复杂XML的解析及组装
- Javascript对象探讨