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 字符串编解码研究相关推荐

  1. python查看字符串编码方式_Python字符编码判断方法分析

    本文实例讲述了Python字符编码判断方法.分享给大家供大家参考,具体如下: 方法一: isinstance(s, str) 用来判断是否为一般字符串 isinstance(s, unicode) 用 ...

  2. c int转字符串_【C++实现python字符串函数库】字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  3. Python - 字符串编解码

    文章目录 关于编解码 编码的种类 代码实现编解码 常用字符串--字节转换 字节样式字符串 编解码 url 编解码 字节相加 关于编解码 编码/解码本质上是一种映射 字符a 用 ascii 编码则是65 ...

  4. Python进阶8——字典与散列表,字符串编解码

    Python用散列表来实现字典,散列表就是稀疏数组(数组中有空白元素),散列表中的元素叫做表元,字典的每个键值对都占用一个表元,一个表元分成两个部分,一个是对键的应用,另一个是对值的引用,因为表元的大 ...

  5. python字符编码讲解_python 字符编码讲解

    ASCII控制字符  Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...

  6. 字符编码在python中的处理_python 字符编码处理问题总结

    Python中常常遇到这种字符编码问题,尤其在处理网页源代码时(特别是爬虫中): UnicodeDecodeError: 'XXX' codec can't decode bytes in posit ...

  7. 韩文编码python_python中的字符串编码问题——4.unicode编解码(以实际工作中遇到的韩文编码为例)...

    韩文unicode编解码 问题是这样,工作中遇到有韩文数据出现乱码,说是unicode码. 类似这样: id name323 52186863 149 63637538 314 65516863 32 ...

  8. python编码格式有哪些_Python JSON编解码的方式有哪些

    Python JSON编解码的方式有哪些 发布时间:2020-11-04 17:52:46 来源:亿速云 阅读:92 今天就跟大家聊聊有关Python JSON编解码的方式有哪些,可能很多人都不太了解 ...

  9. python网址编码转换_python字符串与url编码的转换实例

    python字符串与url编码的转换实例 更新时间:2018年05月10日 10:27:46 作者:Tangzongyu123 今天小编就为大家分享一篇python字符串与url编码的转换实例,具有很 ...

最新文章

  1. 4个mos管驱动的全桥电路原理_电源转压电路设计基础
  2. HTML+CSS实例——漂亮的查询部件(一)
  3. 获取IOS应用的子目录
  4. 手动爬虫之流程笔记1(python3)
  5. codeforces 962E Byteland, Berland and Disputed Cities 最小生成树变形
  6. 在Salesforce中调用外部系统所提供的的Web Service
  7. CAN总线技术在船舶监控系统的应用
  8. yshon对讲机如何调频率_窄带宽、窄脉宽、高重复频率,主动调Q光纤激光器是如何实现的?...
  9. NeurIPS 2020 | 微软亚洲研究院论文摘录之目标检测篇
  10. Python 关键词触发的魔法方法
  11. 如果重新设计网络,有没有可能合并IP地址跟MAC地址?
  12. “安装程序无法定位现有系统分区,也无法创建新的系统分区”提示
  13. .net面向对象学习笔记
  14. Android UI开发第三十九篇——Tab界面实现汇总及比较
  15. 自动化测试和手工测试结果汇总小实践
  16. cefsharp作为采集工具(学习笔记)
  17. 一种简单的图像显著性计算模型
  18. 【docker】docker的简单状态监控
  19. 地理加权归回模型 (GWR) 参数估计
  20. python数字转对应中文_python英文数字到中文数字的转换

热门文章

  1. nginx 配置文件 linux,Linux-nginx.conf配置文件模板
  2. python3反爬虫原理与绕过实战 网盘_Python 3反爬虫原理与绕过实战
  3. python mock_Python中使用mock.Mock()进行mock测试
  4. video 属性和事件用法大全
  5. Some Essential JavaScript Questions And Answers(6)
  6. 理解Event的冒泡模型
  7. Shoutem旨在成为React Native移动应用领域的WordPress
  8. js立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( )) 有区别?
  9. 复杂XML的解析及组装
  10. Javascript对象探讨