美文网首页廖雪峰的python基础教程学习笔记
Python学习笔记(三)字符编码

Python学习笔记(三)字符编码

作者: 晶爷传说 | 来源:发表于2018-02-13 19:11 被阅读0次

1. 常用编码


·ASCII:一个字节(没有汉字),
·Unicode:包含各国语言,通常是两个字节,如果用到特别生僻的字符,需要4个字节
·UTF-8:Unicode的变种,可变长编码,将一个Unicode字符根据大小编码成1-6个字节,常用英文字母1个字节,汉字通常3个字节,生僻字符4-6个字节

很多网页源码:
<meta charset="UTF-8" />  :  表示采用的是UTF-8编码

2. Python字符串

在Python3中,字符串使用Unicode编码,即它支持多国语言。ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

>>> ord('P')
80
>>> chr(81)
'Q'    

若知道字符整数编码可写作如下:

>>> '\u4e2d\u6587'
'中文'

Python中,字符串类型为str,在内存中以Unicode编码存在,其一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘,需要把str变为以字节为单位的bytes。Python对bytes类型的数据用带b前缀的单引号或双引号表示:

x = b'ABC'

'ABC'与b'ABC'的区别:前者为str,后者为bytes,显示内容一样,但bytes的每个字符只占用一个字节。
以Unicode表示的str通过encode()方法可以编码为指定的bytes,如:

>>> 'Python'.encode('ascii')
b'Python'
>>> '中国'.encode('utf-8')
b'\xe4\xb8\xad\xe5\x9b\xbd'
>>> 'Python'.encode('utf-8')
b'Python'
>>> '中国'.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:      ordinal not in range(128)

可以看出,含有中文的str无法用ASCII编码,因为中文的编码范围超出了ASCII编码范围。
反过来,如果从网络或磁盘上读取字节流,那么读到的是bytes,要将其转变为str,用decode()方法:

>>> b'Python'.decode('utf-8')
'Python'
>>> b'\xe4\xb8\xad\xe5\x9b\xbd'.decode('utf-8')
'中国'

如果bytes中包含无法解码的字节,会报错:

>>> b'\xe4\xb8\xad\xe5'.decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe5 in position 3:     unexpected end of data

如果bytes中只有一小部分无效字节,可以传入errors='ignore'忽略错误字节:

>>> b'\xe4\xb8\xad\xe5'.decode('utf-8', errors='ignore')
'中'

len()的使用:对于str,用来计算字符数,对于bytes,用来计算字节数:

>>> len('Python')
6
>>> len('中国')
2
>>> len('Python'.encode('utf-8'))
6
>>> len('中国'.encode('utf-8'))
6

可以看出,转换后,一个中文字符一般占用3个字节,一个英文字符只占用1个字节。在进行str与bytes的转换时,应当始终坚持使用UTF-8编码方式。
特殊情况下,可能需要使用特殊编码,如:

>>> '中国'.encode('gb2312')
b'\xd6\xd0\xb9\xfa'

GB2312编码:GB2312是国家制定的汉字编码标准,使用双子节进行编码。由6763个常用汉字和682个的非汉字字符组成,一个汉字两个字节。对于一些生僻字及古文,使用扩充后的GBK编码。

在写Python源代码.py文件时,一般在开头写上:

#!usr/bin/env python3
# -*- coding: utf-8 -*-

第一行:对于Linux/OS X系统,提示系统这是一个Python可执行程序,对于Windows系统,会忽略该条注释
第二行:告诉Python解释器,按照UTF-8编码来读取源代码,否则源代码中的中文可能出现乱码

相关文章

  • Python 基础

    学习资料 Python之旅 相关链接 Python - 基本数据类型 笔记 字符编码 基本概念 character...

  • Python学习笔记(三)字符编码

    1. 常用编码 ·ASCII:一个字节(没有汉字),·Unicode:包含各国语言,通常是两个字节,如果用到特别生...

  • python学习随便

    Python学习__字符串编码 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()...

  • 2018-11-08

    今天,我们深入学习了字符串。学习了字符串编码: python中的字符采用的是Unicode编码 a.什么是编码 ...

  • python学习笔记20_字符编码与转码

    python 笔记20 python 字符编码与转码 详细文章: http://www.cnblogs.com/y...

  • 【Python入门】4.Python编程基础之字符编码

    本节摘要:字符编码;输出格式化 Daily Record:每天一纪念,记录下python的学习历程,入门学习笔记与...

  • python 高级方法

    Python的字符串类型 字符编码方法 查看Python中的字符串编码名称,查看系统的编码 源文件字符集编码声明:...

  • 编程笔记 | 字符编码、Python字符串以及常见异常

    在讲 Python 字符串之前先了解一下常用的字符编码 常用三种字符编码发展 常用的三种字符编码与特点: ASCI...

  • python编码

    python编码 python编码简介 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,...

  • json与python

    Python 对象编码成 JSON 字符串 json.dumps 用于将 Python 对象编码成 JSON 字符...

网友评论

    本文标题:Python学习笔记(三)字符编码

    本文链接:https://www.haomeiwen.com/subject/twrjtftx.html