python 的字符编码
Posted FLYMOOD
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 的字符编码相关的知识,希望对你有一定的参考价值。
1. unicode 与utf-8
https://www.jianshu.com/p/e1fd1d936278
- ASCII 是字符集+编码规则。只对英文字母和常见的符号进行了编号,最多只有256个字符(一个byte)
- Unicode 是「字符集」, 为世界上的所有字符统一指定了一个2byte 数字
- UTF-8 是「编码规则」, 这是一种存储编码实现方式,感觉是为了节省内存空间用的。使用不定长度编码,比如字母用1个byte, 汉字用三个byte.
https://www.cnblogs.com/lowmanisbusy/p/9136347.html
unicode编码: unicode编码为世界上所有字符都分配了一个唯一编号, 为十六进制, 如中文简体汉字 “渣” 的 Unicode编号就是 6E23,
unicode仅仅定义了每个字符的编号,并没有定义如何将这个编号进行存储的方式,所以后来出现了utf-8, gbk等编码格式, 它们都是 unicode 的一种实现方式, 仍然使用了unicode 中的唯一编号,个人对其的简单理解就是在unicode编码的基础之上又定义了对字符的存储方式.
https://www.jianshu.com/p/9920595791b7
2. Python2 中
python2默认字符编码为:ASCII, ASCII码 包含了128个字符, 其中包括所有的英文字符, 阿拉伯数字, 标点符号, 控制符号等
在python2 中使用sys.getdefaultencoding() 得到的是 ascii
在python2中字符串分为 unicode 和 str 类型
str : \'this is a str\'
unicode: u\'this is a unicode code\'
事实上, python2 中被引号括起来的字符串就是 str, 而str 本身 就是一串字节码(byte).
如果被括起来字符是字母,那么就是ascii 编码的字符。
如果被括起来字符是汉字,那么也能得到一串字节, 但是字节码是什么编码格式的就不确定了。所以最好加上u\'\', 指定为unicode 编码。
Str To Unicode 使用decode(), 解码 Unicode To Str 使用encode(), 编码
如果要将str 转换成unicode, 那么需要使用decode(), 将ascii 字符转换成unicode 字符。
3. Python3 中
python3默认字符编码为:utf-8
在python3 中使用如下代码得到的是 utf-8
sys.getdefaultencoding()
在python3中字符串分为 str 和 bytes 两种类型, 没有unicode 类型的字符串了。
byte 表示:前者包含原始的8位值
str 表示: unicode 字符 (用双引号括起来就是str 类型的)
https://www.jianshu.com/p/9920595791b7
Str To Bytes 使用 encode(), 编码 Bytes To Str 使用 decode(), 解码
因为 python3 中没有 unicode 类型的字符串, 所有在 python3 中使用下面这种方式定义字符串是没有意义的
my_str = u"渣男不但丑"
4. 其他和字符编码有关
python \'gbk\' codec can\'t decode byte 0xac in position
https://blog.csdn.net/qq_31824879/article/details/83024457
需要指定文件编码
f = open(\'1.txt\',\'r\',encoding=\'utf-8\')
Urlib中的quote 函数:
https://www.cnblogs.com/lu-test/p/9962640.html
URL编码的方式是把需要编码(非ASCII)的字符转化为 %xx 的形式。通常 URL 编码是基于 UTF-8 的(当然这和浏览器平台有关)。
在 Python2.x 中的用法是:
urllib.quote(text)
Python3.x 中是
urllib.parse.quote(text)
按照标准, URL 只允许一部分 ASCII 字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的。
以上是关于python 的字符编码的主要内容,如果未能解决你的问题,请参考以下文章