美文网首页
字符串和字符编码

字符串和字符编码

作者: shayito | 来源:发表于2020-01-28 23:30 被阅读0次

ASCIIUnicodeUTF-8
https://www.liaoxuefeng.com/wiki/1016959663602400/1017075323632896
总结如下

三种编码的对比

Python3用的是Unicode
ord()获取字符的编码
chr()获得编码的字符

>>> ord('中')
20013
>>> chr(25991)
'文'

str:字符类型(Unicode),一字符对应若干字节,形如"xxx",'xxxx'
bytes:比特类型,一字符对应一字节,形如b"xxx",b'xxxx'

Unicode表示的字符可以用encode()方法编码为指定的bytes

# ascii大小写均可
>>> 'ABC'.encode('ascii')  # 纯英文的str可以用ASCII编码为bytes
b'ABC'
>>> '中文'.encode('utf-8')  # 含有中文的str可以用UTF-8编码为bytes
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')  # 含有中文的str无法用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)

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

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

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

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

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

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

在操作字符串时,为避免乱码,要始终坚持用UTF-8编码对str和bytes进行转换。

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

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

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 (没有BOM)编码: 选择UTF-8

相关文章

  • Python中的字符串编码

    Python中的字符串编码 定义字符串 Python 中存在两种编码方式的字符串:ASCII 和 Unicode。...

  • python 高级方法

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

  • golang字符串重新编码

    golang 字符串重新编码 golang 字符串重新编码//byte decode/*** function ...

  • 2018-11-08

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

  • Python基础(二)-字符串和编码

    字符串和编码 字符编码 字符编码也称字集码,是把字符集中的字符编码为指定集合中某一对象,以便文本在计算机中存储和通...

  • Python基础

    数据类型与变量 字符串在内存中的表示(数字变量同) 字符串和编码 1.获取字符整数ord('A') 2.将编码转换...

  • 笔记-encode与decode

    字节串-->decode('原来的字符编码')-->Unicode字符串-->encode('新的字符编码')--...

  • 部分知识点

    chr(编码值) - 将字符编码转换成字符 ord(字符) - 获取字符对应的编码值 可以将字符编码放到字符串中便...

  • 霍夫曼编码

    问题: 请设计一个算法,给一个字符串进行二进制编码,使得编码后字符串的长度最短 思路:使用霍夫曼编码构造字符串编码...

  • Python编码问题

    默认编码 字符串 python2 文本字符串默认编码是ASCII,中文默认UTF-8python3 文本字符串默认...

网友评论

      本文标题:字符串和字符编码

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