python字符编码

8人阅读 评论(0) 收藏 举报
分类:

在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如:

print('hello你好')

会输出:

hello你好

Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes

以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.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编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

在bytes中,无法显示为ASCII字符的字节,用\x##显示。


反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'


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

>>> b'\xe4\xb8\xad\xff'.decode('utf-8')
Traceback (most recent call last):
  ...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte

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

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


要计算str包含多少个字符,可以用len()函数:

>>> len('ABC')
3
>>> len('中文')
2

len()函数计算的是str的字符数,如果换成byteslen()函数就计算字节数:

>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6

可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。

在操作字符串时,我们经常遇到strbytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对strbytes进行转换。








查看评论

python 获取文件字符编码类型

被Windows记事本的utf-8编码坑了一上午,python 按utf-8编码读取出来的内容总是有问题。最后通过程序获取文件编码类型才发现,记事本的utf-8是带BOM的!要用utf-8-sig类型...
  • u013314786
  • u013314786
  • 2017-09-01 16:31:46
  • 411

【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法

Python 2.x中的字符编码,设计的的确不好,导致初学者,甚至是即使用Python很长时间的人,都会经常遇到字符编解码方面的错误。 下面就把一些常见情,尽量的都整理出来,并给出相应的解决办法...
  • gmj4850
  • gmj4850
  • 2013-12-04 11:10:51
  • 1309

python字符编码的判断

最近需要使用字符串来解决一些问题,中间牵涉到使用url,而url的编码方式往往又是不同于平时所使用的编码方式的,这里就需要检测一下url所使用的编码方式,然后将url的编码方式转换为所需要的编码方式,...
  • Together_CZ
  • Together_CZ
  • 2016-12-09 18:58:34
  • 293

彻底搞懂Python的字符编码

前言:中文编码问题一直是程序员头疼的问题,而Python2中的字符编码足矣令新手抓狂。本文将尽量用通俗的语言带大家彻底的了解字符编码以及Python2和3中的各种编码问题。一、什么是字符编码。要彻底解...
  • apache0554
  • apache0554
  • 2016-12-26 21:11:29
  • 14007

字符 编码 概述

  • 2009年07月24日 17:45
  • 41KB
  • 下载

HTML特殊字符编码

  • 2008年11月11日 09:17
  • 114KB
  • 下载

Python判断字符串、文件字符编码

python判断文件和字符串编码类型可以用chardet工具包,可以识别大多数的编码类型。但是有时候会识别错误。比如,前几天在读取一个Windows记事本保存的txt文件时,GBK却被识别成了KOI8...
  • u013314786
  • u013314786
  • 2017-12-06 21:00:14
  • 159

python3之字符串和编码

在最新的python3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转...
  • u010004082
  • u010004082
  • 2018-02-26 09:28:51
  • 37

浅谈python中的字符编码与转码

ASCII码 ASCII码就是机器能识别的单字节编码系统,它是单字节的。Unicode编码 Unicode编码是一种统一码、万国码、单一码,它能编码任何国家的语言,Unicode编码不管英文还是中...
  • Jorocco
  • Jorocco
  • 2017-08-29 15:04:06
  • 132

Python字符编码整理

python 字符编码
  • CopyStylexh
  • CopyStylexh
  • 2017-06-07 13:16:27
  • 174
    个人资料
    持之以恒
    等级:
    访问量: 1714
    积分: 160
    排名: 109万+
    文章分类
    文章存档