您的位置:

关于python编码时的信息

本文目录一览:

python有哪几种编码方式

第一种:ASCII码。是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,它是现今最通用的单字节编码系统,并等同于国际标准IS/IEC

646。

由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机李,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母a的编码是97,后128个称为扩展ASCII码。

第二种:GBK和GB2312。能在计算机中显示中文字符是至关重要的,然而ASCII表里一个偏旁部首都没有,所以我们需要一个关于中文和数字对应的关系表,一个字节只能最多表示256个字符,用处理中文显然一个字节是不够的,所以我们需要采用两个字节来表示,所以中国制定了GB2312编码,用来将中文编写进去。

第三种:Unicode。因为各个国家都有一套自己的编码,所以无法避免冲突,因此Unicode诞生了。它可以把所有语言都统一到一套编码里,这样就不会存在乱码问题了,现代操作系统和大多数编程语言都直接支持Unicode。

第四种:UFT-8。基于节约的原则,出现了把Unicode编码转化为可变长编码的UTF-8编码。而UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成一个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节,如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

怎么在Python里使用UTF-8编码

概述

在python代码即.py文件的头部声明即可

解析

py文件中的编码

Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用"编码指示"来修正一个 module 的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明:

# -*- coding=utf-8 -*-

#coding=utf-8

# 以上两种选其一即可

其他的编码如:gbk、gb2312也可以;否则会出现:

SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no encoding declared; see for details

python中的编码与解码

先说一下python中的字符串类型,在python中有两种字符串类型,分别是 str 和 unicode,他们都是basestring的派生类;

str类型是一个包含Characters represent (at least) 8-bit bytes的序列;

unicode 的每个 unit 是一个 unicode obj;

在str的文档中有这样的一句话:

The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file.

也就是说在读取一个文件的内容,或者从网络上读取到内容时,保持的对象为str类型;如果想把一个str转换成特定编码类型,需要把str转为Unicode,然后从unicode转为特定的编码类型如:utf-8、gb2312等。

拓展内容

utf-8编码

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或发送文字的应用中,优先采用的编码。

UTF-8使用一至六个字节为每个字符编码(尽管如此,2003年11月UTF-8被RFC 3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF,也就是说最多四个字节):

1、128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。

2、带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要两个字节编码(Unicode范围由U+0080至U+07FF)。

3、其他基本多文种平面(BMP)中的字符(这包含了大部分常用字,如大部分的汉字)使用三个字节编码(Unicode范围由U+0800至U+FFFF)。

4、其他极少使用的Unicode 辅助平面的字符使用四至六字节编码(Unicode范围由U+10000至U+1FFFFF使用四字节,Unicode范围由U+200000至U+3FFFFFF使用五字节,Unicode范围由U+4000000至U+7FFFFFFF使用六字节)。

对上述提及的第四种字符而言,UTF-8使用四至六个字节来编码似乎太耗费资源了。但UTF-8对所有常用的字符都可以用三个字节表示,而且它的另一种选择,UTF-16编码,对前述的第四种字符同样需要四个字节来编码,所以要决定UTF-8或UTF-16哪种编码比较有效率,还要视所使用的字符的分布范围而定。不过,如果使用一些传统的压缩系统,比如DEFLATE,则这些不同编码系统间的的差异就变得微不足道了。若顾及传统压缩算法在压缩较短文字上的效果不大,可以考虑使用Unicode标准压缩格式(SCSU)。

互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。互联网邮件联盟(IMC)建议所有电子邮件软件都支持UTF-8编码。

Python编码时应该注意的几个情况

# 交换两个变量

a, b = b, a

# 切片(slice)操作符中的step参数。(切片操作符在python中的原型是[start:stop:step],即:[开始索引:结束索引:步长值])

a = [1,2,3,4,5]

a[::2] # 遍历列表中增量为2的数据

[1,3,5]

# 特殊情况下,`x[::-1]`是实现x逆序的实用的方式

a[::-1]

[5,4,3,2,1]

# 逆序并切片

x[::-1]

[5, 4, 3, 2, 1]

x[::-2]

[5, 3, 1]

python是什么编码格式

python编码总结:

1).首先python有两种格式的字符串,str和unicode,其中unicode相当于字节码那样,可以跨平台使用。

str转化为unicode可以通过unicode(),u,str.decode三种方式

unicode转化为str,如果有中文的话,一般通过encode的方式

2).如果代码中有中文的话,我们一般会添加 "# coding=utf-8",这个是什么作用呢,一般如下:

如果代码中有中文注释,就需要此声明比较高级的编辑器(比如我的emacs),会根据头部声明,将此作为代码文件的格式。程序会通过

头部声明,解码初始化 u”人生苦短”,这样的unicode对象,(所以头部声明和代码的存储格式要一致

所以,当我们填上编码头的时候,使用s="中文",实际上type(s)是一个str,是已经将unicode以utf-8格式编码成str。

其次,如果我们在代码中使用s=u'中文',相当于将str以utf-8解码成unicode。

推荐学习《python教程》。

Python 源程序编码注意事项?

默认情况下,Python 源文件是 UTF-8 编码。在此编码下,全世界大多数语言的字符可以同时用在字符串、标识符和注释中 — 尽管 Python 标准库仅使用 ASCII 字符作为标识符,这只是任何可移植代码应该遵守的约定。如果要正确的显示所有的字符,你的编辑器必须能识别出文件是 UTF-8 编码,并且它使用的字体能支持文件中所有的字符。

你也可以为源文件制定不同的字符编码。为此,在 #! 行(首行)后插入至少一行特殊的注释行来定义源文件的编码:

# -*- coding: encoding -*-

通过此声明,源文件中所有的东西都会被当作用 encoding 指代的 UTF-8 编码对待。在 Python 库参考手册 codecs 一节中你可以找到一张可用的编码列表。

例如,如果你的编辑器不支持 UTF-8 编码的文件,但支持像 Windows-1252 的其他一些编码,你可以定义:

# -*- coding: cp-1252 -*-

这样就可以在源文件中使用 Windows-1252 字符集中的所有字符了。这个特殊的编码注释必须在文件中的 第一或第二 行定义。

Python 编码转换与中文处理

python 中的 unicode 是让人很困惑、比较难以理解的问题. 这篇文章 写的比较好, utf-8是 unicode的一种实现方式,unicode、gbk、gb2312是编码字符集.

Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用" 编码指示 "来修正一个 module 的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明: # -*- coding=utf-8 -*- 或者 #coding=utf-8

其他的编码如:gbk、gb2312也可以;否则会出现:

先说一下python中的字符串类型,在python中有两种字符串类型,分别是 str 和 unicode ,他们都是basestring的派生类;

在str的文档中有这样的一句话:

也就是说在读取一个文件的内容,或者从网络上读取到内容时,保持的对象为str类型;如果想把一个str转换成特定编码类型,需要把str转为Unicode,然后从unicode转为特定的编码类型如:utf-8、gb2312等。

unicode 转为 gb2312,utf-8等,使用 encode(encoding)

utf-8,GBK转换为 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)

普通的 str 转为 unicode,

如果直接执行s.encode('gb2312')会发生什么?

这里会发生一个异常:Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb2312。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding 是 ANSCII,如果 s 不是这个类型就会出错。

拿上面的情况来说,我的 sys.defaultencoding 是 anscii,而 s 的编码方式和文件的编码方式一致,是 utf8 的,所以出错了:

对于这种情况,我们有两种方法来改正错误:

s = '中文'

s.decode('utf-8').encode('gb2312') ```

import sys

reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入

sys.setdefaultencoding('utf-8')

str = '中文'

str.encode('gb2312')

print open("Test.txt").read()

import codecs

print open("Test.txt").read().decode("utf-8")

Traceback (most recent call last):

File "ChineseTest.py", line 3, in module

print open("Test.txt").read().decode("utf-8")

UnicodeEncodeError: 'gbk' codec can't encode character u'\ufeff' in position 0: illegal multibyte sequence

import codecs

data = open("Test.txt").read()

if data[:3] == codecs.BOM_UTF8:

data = data[3:]

print data.decode("utf-8")

s = "中文"

print unicode(s, "utf-8")

Traceback (most recent call last):

File "ChineseTest.py", line 3, in module

s = unicode(s, "utf-8")

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data

s = "中文"

print unicode(s, "gbk")

s = "中文"

print unicode(s, "cp936")