一、Python字符编码介绍
1、须知:
在python 2中默认编码是 ASCII,而在python 3中默认编码是 unicode
unicode 分为utf-32 (占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),所以utf-16 是最常用的unicode版本,但是在文件里存的还是utf-8,因为utf8省空间
在python 3,encode编码的同时会把stringl变成bytes类型,decode解码的同时会把bytes类型变成string类型
在unicode编码中 1个中文字符=2个字节,1个英文字符 = 1个字节,切记:ASCII是不能存中文字符的
utf-8是可变长字符编码,它是unicode的优化,所有的英文字符依然按ASCII形式存储,所有的中文字符统一是3个字节
unicode包含了所有国家的字符编码,不同字符编码之间的转换都需要经过unicode的过程
python本身的默认编码是utf-8
2、py2中的编码和转码的过程,如图:
注:因为unicode是中间编码,任何字符编码之前的转换都必须解码成unicode,在编码成需要转的字符编码
二、字符编码的转换
1、py2字符编码的转换,代码如下:
#! /usr/bin/env python # -*- coding:utf-8 -*- # __auther__ == luoahong s = "我是学员" #utf-8解码成unicode编码 s_to_unicode = s.decode("utf-8") print("--------s_to_unicode-----") print(s_to_unicode) #然后unicode再编码成gbk s_to_gbk = s_to_unicode.encode("gbk") print("-----s_to_gbk------") print(s_to_gbk) #gbk解码成unicode再编码成utf-8 gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") print("------gbk_to_utf8-----") print(gbk_to_utf8) #输出 --------s_to_unicode----- 我是学员 -----s_to_gbk------ "htmlcode">#! /usr/bin/env python # -*- coding:utf-8 -*- # __auther__ == luoahong #u代码字符编码是unicode s = u'你好' #已经是unicode,所以这边直接是编码成gbk s_to_gbk = s.encode("gbk") print("----s_to_gbk----") print(s_to_gbk) #这边再解码成unicode然后再编码成utf-8 gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") print("-----gbk_to_utf8---") print(gbk_to_utf8) #输出 ----s_to_gbk---- "htmlcode">#! /usr/bin/env python # __auther__ == luoahong #无需声明字符编码,当然你声明也不会报错 s = '你好' # 字符串s已经是unicode编码,无需decode,直接encode s_to_gbk = s.encode("gbk") print("----s_to_gbk----") print(s_to_gbk) #这边还是一样,gbk需要先解码成unicode,再编码成utf-8 gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") print("-----gbk_to_utf8---") print(gbk_to_utf8) #解码成unicode字符编码 utf8_decode = gbk_to_utf8.decode("utf-8") print("-------utf8_decode----") print(utf8_decode) #输出 ----s_to_gbk---- b'\xc4\xe3\xba\xc3' -----gbk_to_utf8--- b'\xe4\xbd\xa0\xe5\xa5\xbd' -------utf8_decode---- 你好注:在python 3,encode编码的同时会把stringl变成bytes类型,decode解码的同时会把bytes类型变成string类型,所以你就不难看出encode后的把它变成了一个bytes类型的数据。还有需要特别注意的是:不管是否在python 3的文件开头申明字符编码,只能表示,这个python文件是这个字符编码,文件中的字符串还是unicode,如下图:
三、总结:
1、uniocode能识别所有字符编码的字符串
2、在python 2中,字符编码之间的转化需要通过unicode才能转换,所以打印时,可以是使用unicode,也可以使用对应的字符编码(文件开头指定编码),打印字符或者字符串,因为py2中没有对字符和字节做明显区分, 所以才混导致这样的结果。
3、在python 3中,只有通过Unicode去识别字符的,如果转成编码成对应编码格式了,就直接变成对应编码的bytes类型的字节码,也就是二进制,需要识别,必须解码成Unicode才能识别
更多关于Python字符编码转码问题请查看下面的相关链接
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 张韶涵2024 《不负韶华》开盘母带[低速原抓WAV+CUE][1.1G]
- lol全球总决赛lcs三号种子是谁 S14全球总决赛lcs三号种子队伍介绍
- lol全球总决赛lck三号种子是谁 S14全球总决赛lck三号种子队伍
- 群星.2005-三里屯音乐之男孩女孩的情人节【太合麦田】【WAV+CUE】
- 崔健.2005-给你一点颜色【东西音乐】【WAV+CUE】
- 南台湾小姑娘.1998-心爱,等一下【大旗】【WAV+CUE】
- 【新世纪】群星-美丽人生(CestLaVie)(6CD)[WAV+CUE]
- ProteanQuartet-Tempusomniavincit(2024)[24-WAV]
- SirEdwardElgarconductsElgar[FLAC+CUE]
- 田震《20世纪中华歌坛名人百集珍藏版》[WAV+CUE][1G]
- BEYOND《大地》24K金蝶限量编号[低速原抓WAV+CUE][986M]
- 陈奕迅《准备中 SACD》[日本限量版] [WAV+CUE][1.2G]
- TWINS.2004-SUCHABETTERDAY精美礼盒特别版2CD【英皇娱乐】【WAV+CUE】
- 音乐磁场.1991-1998-音乐磁场系列22CD【瑞星】【WAV+CUE】
- 韦绮姗.1993-LOVE.ME.ONCE.AGAIN【永高创意】【WAV+CUE】