zoukankan      html  css  js  c++  java
  • python2和python3的编码encode解码decode函数

    python比较坑的一个点;意义完全变了的两个函数

    首先 常用的编码方式有3种,utf-8:  常用的传输和存储格式,Unicode的一种简化

                                                  Unicode:包括了所有可能字符的国际统一编码

                                                  GBK:中文的一种编码标准,包括中文和英文

    在python2中  解码函数decode是 其他编码(utf-8或GBK或其他)——>Unicode编码   用法:u=str.decode('utf-8') 括号里是原编码格式

                                      encode是 Unicode编码——>其他编码(utf-8或GBK或其他)   用法:g=u.encode('gbk') u是Unicode编码格式,括号里是目标编码格式

    在python3中:python3中不用再考虑Unicode也不用考虑字符串的原编码类型, 文件读入str后都是Unicode编码,文件处理后,                          想写到文件用什么编码方式,在函数中用变量定义就好。

                          字符串有两种数据类型,一种是字符串str,另一种是字节数据bytes

                          编码函数还是encode,但意义完全不同了,编码函数是  字符串str——>目标编码格式的字节类型bytes

                           

    s = "中文"
    t=s.encode(encoding='utf-8')
    p=s.encode(encoding='gbk')
    print(t)
    print(p)

    输出:

    b'xe4xb8xadxe6x96x87'
    b'xd6xd0xcexc4'

                          解码函数还是decode,但意义完全不同了,解码函数是  字节类型bytes——>字节编码类型的字符串str

     

    s = "中文"
    
    p=s.encode(encoding='gbk')
    
    sp=p.decode(encoding='gbk')
    
    print(p)
    
    print(sp)

    b'xd6xd0xcexc4'
    中文

    这里要注意以什么格式编码就要以什么格式解码,要不然会报错

    s = "中文"
    
    p=s.encode(encoding='gbk')
    
    sp=p.decode(encoding='utf-8')
    
    print(p)
    
    print(sp)
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

    举个大栗子

    s = "中文"
    
    g=s.encode(encoding='gbk')  #从utf-8转成gbk字节码
    gg=g.decode(encoding='gbk') #从gbk字节码转成gbk字符串
    u=gg.encode(encoding='utf-8')#从gbk转成utf-8
    uu=u.decode(encoding='utf-8')
    k=uu.encode(encoding='gbk')  #从utf-8转成gbk
    kk=k.decode(encoding='gbk')
    print(g)
    print(gg)
    print(u)
    print(uu)
    print(k)
    print(kk)

     输出:

    b'xd6xd0xcexc4'
    中文
    b'xe4xb8xadxe6x96x87'
    中文
    b'xd6xd0xcexc4'
    中文

    注意:在python3中,str全部都是Unicode编码,所以看str变量的编码没有什么意义,而如果encode了,自然要encode里的变量参数来按编码类型编码

  • 相关阅读:
    Java单链表的实现方法汇总整理
    Java内存模型(JMM)图文并茂,条理清晰
    Java基础知识点整理(2021年最新版)
    Spring常见的77道面试题及答案(2021版)
    Python第二次学习知识点总结
    VUE学习十九,表单输入绑定v-model
    VUE学习十八,事件处理v-on
    VUE学习十七,列表渲染v-for
    VUE学习十五,Class与Style绑定
    VUE学习十四,侦听器
  • 原文地址:https://www.cnblogs.com/mghhzAnne/p/10256145.html
Copyright © 2011-2022 走看看