zoukankan      html  css  js  c++  java
  • Py3编码解码

    Py3编码解码
     
    写的不好请谅解,有问题欢迎指出.
     
    python2.x中的解决方案(图片来源于网络)

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Author   : "Wjl"
    # @Date     : 2017/11/24
    # @Time     : 15:06
    # @SoftWare : PyCharm
    # @File     : 编码解码.py
    
    """
    Python2.x 中默认编码是Ascii,所以想写中文必须在开头声明
    # -*- coding: utf-8 -*-
    否则就不支持中文
    或者利用如下的方法来解码
    """
    str1 = '测试'
    # 将utf-8解码成unicode
    str1_to_unicode = str1.decode('utf-8')  # 注意,这里这个utf-8是原编码
    # 再将unicode编码成gbk
    unicode_to_gbk = str1_to_unicode.encode('gbk')
    print(str1)
    print(str1_to_unicode)
    print(unicode_to_gbk)
    
    """
    总结: 所有的编码想互相转换,必须先decode成unicode,然后才能encode到指定编码
    为什么必须要先decode? 因为unicode是万国码,什么语言都支持,相当于是其他编码的父类
    父类派生了所有的儿子,你不能从儿子变成另一个儿子.因为你不了解另一个儿子的构造,
    而父亲知道(怎么有点邪恶的感觉),所以你必须先decode成unicode,然后才能encode到其他编码。
    """
    View Code
     
    python3.x中字符的默认编码是Unicode,文件默认编码是utf-8,也就是说在python3中你不需要再声明: # -*- coding: utf-8 -*- 这句话了。
    虽然文件编码是utf-8,但是字符的编码都是Unicode。
    #!/usr/bin/env python
    # @Author   : "Wjl"
    # @Date     : 2017/11/24
    # @Time     : 15:06
    # @SoftWare : PyCharm
    # @File     : 编码解码.py
    
    s = '测试字符串'
    s_to_gbk = s.encode('gbk')
    print(s)
    """
    在python3里encode会在编码的同时会把中文字符转成bytes类型,所以下面打印会出现
    b'xb2xe2xcaxd4xd7xd6xb7xfbxb4xae'
    """
    print(s_to_gbk)
    
    # 想要看见怎么办?
    # 只能把它再转回去
    print(s_to_gbk.decode('gbk'))
    
    """
    那你说,这不是多此一举吗?
    错! 这种形式就让我们的编码灵活,当我们想要其他编码的时候encode即可,需要解码是decode即可
    而不需要像PY2一样先decode到unicode然后再encode,PY3可以直接encode。
    
    而且py3默认在编码时会给你做成butes类型,这个类型很有用,在某些函数传递参数时它们接收的就是这个类型的参数
    而你编码后就可以直接将这个类型传递给需要的函数。
    
    举个列子:
    client发送数据给server端
    
    py2:
    如果我encode时gbk,那么发送给server端,server端如果是utf8,就可能出现乱码
    
    py3
    我encode是gbk,发送给server端是一个bytes类型的数据,那么server端想看就必须解码。
    
    所以py3好处就是一旦编码就必须解码,强制你解码,就减少了乱码问题,而py2则不会
    """
    View Code
  • 相关阅读:
    Elasticsearch 分词
    Elasticsearch:文档乐观锁控制 if_seq_no与if_primary_term
    调用javaAPI访问hive
    sqoop笔记
    hive学习
    添加用户到sudo组
    HTTP协议用的TCP但是只建立单向连接
    Hadoop基本操作
    Hadoop原理介绍
    sed用法
  • 原文地址:https://www.cnblogs.com/xiaofengchu/p/8425355.html
Copyright © 2011-2022 走看看