Python编码介绍——encode和decode
在 python 源代码文件中,如果你有用到非ASCII字符,则需要在文件头部进行字符编码的声明,声明如下:
- # code: UTF-8
 
因为python 只检查 #、coding 和编码字符串,所以你可能回见到下面的声明方式,这是有些人为了美观等原因才这样写的:
- #-*- coding: UTF-8 -*-
 
常见编码介绍:
- GB2312编码:适用于汉字处理、汉字通信等系统之间的信息交换
 - GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码
 - ASCII编码:是对英语字符和二进制之间的关系做的统一规定
 - Unicode编码:这是一种世界上所有字符的编码。当然了它没有规定的存储方式。
 - UTF-8编码:是 Unicode Transformation Format - 8 bit 的缩写, UTF-8 是 Unicode 的一种实现方式。它是可变长的编码方式,可以使用 1~4 个字节表示一个字符,可根据不同的符号而变化字节长度。
 
编码转换:
Python内部的字符串一般都是 Unicode编码。代码中字符串的默认编码与代码文件本身的编码是一致的。所以要做一些编码转换通常是要以Unicode作为中间编码进行转换的,即先将其他编码的字符串解码(decode)成 Unicode,再从 Unicode编码(encode)成另一种编码。
- decode 的作用是将其他编码的字符串转换成 Unicode 编码,eg name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码
 - encode 的作用是将Unicode编码转换成其他编码的字符串,eg name.encode(”GB2312“),表示将GB2312编码的字符串name转换成GB2312编码
 
所以在进行编码转换的时候必须先知道 name 是那种编码,然后 decode 成 Unicode 编码,最后载 encode 成需要编码的编码。当然了,如果 name 已经就是 Unicode 编码了,那么就不需要进行 decode 进行解码转换了,直接用 encode 就可以编码成你所需要的编码。值得注意的是:对 Unicode 进行编码和对 str 进行编码都是错误的。
具体的说就是:如果在UTF-8文件中,则这个字符串就是 UTF-8编码的。它的编码取决于当前的文本编码。当然了,GB2312文本的编码就是GB2312。要在同一个文本中进行两种编码的输出等操作就必须进行编码的转换,先用decode将文本原来的编码转换成Unicode,再用encode将编码转换成需要转换成的编码。
eg:
由于内置函数 open() 打开文件时,read() 读取的是 str,读取后需要使用正确的编码格式进行 decode()。write() 写入时,如果参数是 Unicode,则需要使用你希望写入的编码进行 encode(),如果是其他编码格式的 str,则需要先用该 str 的编码进行 decode(),转成 Unicode 后再使用写入的编码进行 encode()。如果直接将 Unicode 作为参数传入 write() ,python 将先使用源代码文件声明的字符编码进行编码然后写入。
- # coding: UTF-8
 - fp1 = open('test.txt', 'r')
 - info1 = fp1.read()
 - # 已知是 GBK 编码,解码成 Unicode
 - tmp = info1.decode('GBK')
 - fp2 = open('test.txt', 'w')
 - # 编码成 UTF-8 编码的 str
 - info2 = tmp.encode('UTF-8')
 - fp2.write(info2)
 - fp2.close()
 
获取编码的方式:
判断是 s 字符串否为Unicode,如果是返回True,不是返回False :
- isinstance(s, unicode)
 
下面代码可以获取系统默认编码:
- #!/usr/bin/env python
 - #coding=utf-8
 - import sys
 - print sys.getdefaultencoding()
 
Python编码介绍——encode和decode的更多相关文章
- Python字符串的encode与decode研究心得——解决乱码问题
		
转~Python字符串的encode与decode研究心得——解决乱码问题 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“/xe4/xb8/xad/xe6/x96/x8 ...
 - 【转 记录】python中的encode以及decode
		
字符串编码常用类型:utf-8,gb2312,cp936,gbk等. python中,我们使用decode()和encode()来进行解码和编码 在python中,使用unicode类型作为编码的基础 ...
 - Python字符串的encode与decode研究心得乱码问题解决方法
		
为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x96\x87”的形式? 为什么会报错“UnicodeEncodeError: 'asc ...
 - Python字符串的encode与decode
		
首先要搞清楚,字符串在Python内部的表示是unicode编码. 因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unic ...
 - Python字符串的encode与decode研究心得 乱码问题解决方法
		
以下摘自:http://www.jb51.net/article/17560.htm 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x ...
 - python字符串的encode和decode
		
原文 decode的作用是将其他编码的字符串转换成unicode编码. str1.decode('gb2312') #表示将gb2312编码的字符串转换成unicode编码 encode的作用是将un ...
 - Python  字符串的encode与decode
		
python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byt ...
 - python 编码(encode)解码(decode)问题
		
s = '匆匆'print(s)s1 = s.decode("utf-8") # utf-8 转成 Unicode,decode(解码)需要注明当前编码格式print(s1,typ ...
 - Python中的encode和decode
		
原文地址:http://www.cnblogs.com/tingyugetc/p/5727383.html 1.Python3中对文本和二进制数据进行了比较清晰的区分,文本总是 unicode ,由 ...
 
随机推荐
- Math.round(),Math.ceil(),Math.floor()的区别
			
1.Math.round():根据"round"的字面意思"附近.周围",可以猜测该函数是求一个附近的整数,看下面几个例子就明白. 小数点后第一位<5 正 ...
 - gvim窗口根据gnome-terminal位置定位
			
gvim启动位置固定的话容易挡到东西,所以写了一段vimscript根据gnome-terminal的位置启动gvim,这样被遮住的概率就一些了. fun! g:get_xterm_pos ()&qu ...
 - 精通javasCRIPT-学习笔记 Features,Functions,Object
			
关于学习javasCRIPT的书,市面上太多了,有犀牛书,红宝书,但是他们都类似于一本书,包含js的一切,并没有站在一个高度上,看js的本质,我计划看一看jquery作者resig写的<精通ja ...
 - 读取和存储文本文件,UTF-8和GB2312通用的函数
			
'------------------------------------------------- '函数名称:ReadTextFile '作用:利用AdoDb.Stream对象来读取UTF-8格式 ...
 - linux提示语言包
			
locale -a 查看可用的语言包.选择中文语言包 echo 'LC_ALL="zh_CN.utf8"' >> /etc/profileecho 'export LC ...
 - MyBatis 异常 集锦
			
异常1.使用映射器 (还没有使用Spring) 异常信息摘要: org.apache.ibatis.binding.BindingException: Type interface com.jege. ...
 - C语言学习 数独游戏
			
摘要:花了1周多时间学习了C语言,开始练手写解数独游戏的程序. C语言学习 数独游戏 作者:乌龙哈里 时间:2015-11-22 平台:Window7 64bit,TCC 0.9.26(x86-64 ...
 - 昨天面试遇到的一道C语言题
			
楼主之前是做C/C++开发的,今年转到java,hadoop方向了,所以很多C/C++的细节都有些模糊了,碰巧这次面试题中,就出了一道C指针的问题. 问题不算难,但楼主一时之间竟也想不起来答案了... ...
 - RabbitMQ高可用配置(Haproxy + Keepalived)
			
网络结构如下图: 共有104.105.106三台RabbitMQ Server,互为集群 其中104和105安装了Haproxy,每个Haproxy承担三台RabbitMQ server的负载均衡 两 ...
 - iOS开发上架之itunes connect里app信息的编辑
			
sku用于我们在后台识别自己的app,所以随你怎么填写