码迷,mamicode.com
首页 > 其他好文 > 详细

Day2-字符编码转换

时间:2017-04-16 23:57:23      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:空间   ascii码   使用   vim   pyc   logs   utf8   efault   tde   


1.在python2默认编码是ASCII, python3里默认是unicode

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

 

python2支持以下图:

技术分享

Python2# vim encode.py
#_*_ coding:utf-8 -*_
import sys
print(sys.getdefaultencoding()) #打印系统默认编码,Centos7为ASCII码

s = "你好" #默认是使用系统编码,utf-8
s_to_unicode = s.decode("utf-8") #utf-8先转换成unicode
print(s_to_unicode,type(s_to_unicode)) #打印目前的编码类型
s_to_gbk = s_to_unicode.encode("gbk") # unicode转换成gbk
print(s_to_gbk)

#反解回去
gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") #gbk先解码成unicode再编码成utf-8
print(gbk_to_utf8)

新东西:
#-*_- coding:utf-8 -*-

s = u"你好" #加个u表示s是unicode编码
print(s)
执行结果:你好
分析:utf-8是unicode的扩展集,这么写,在utf-8中可以直接打印,而gbk则不行

Python3的PyCharm下:
unicode转换成gbk格式:
s="你好" #python3默认是unicode编码
print(s.encode("gbk")) #直接转换成gbk
b‘\xc4\xe3\xba\xc3‘ #python3里转码了之后,变成b二进制类型,跟python2的区别
为什么不能打印出来呢?因为python3默认unicode编码,现转换成了gbk,所以不能打印。解决是声明

#-*-codinf:gbk-*- 声明这个文件编码方式
importsys
print(sys.getdefaultcoding())

s="你好" #但s还是unicode编码,文件编码与字符串无关
print(s.encode("gbk"))
print(s.encode("utf-8").decode("utf-8").encode("gb2312").decode("gb2312"))

Python3里encode时候不仅转了编码,还生成二进制bytes,decode下又变成了字符串。

Day2-字符编码转换

标签:空间   ascii码   使用   vim   pyc   logs   utf8   efault   tde   

原文地址:http://www.cnblogs.com/wolfs685/p/6720779.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!