zoukankan      html  css  js  c++  java
  • python3编码问题个人理解

    #coding=utf-8

    a = "你" # 这个字符串是Unicode和 a = u“你”等价
    b = b'\u4f60' #这个表示b是字节串(如果需要显示b的值则 print(b.decode("unicode-escape")) )系统会返回“你”这个值是因为它根据utf-8来给你解码
    print(a.encode("unicode-escape")) #这个表示a这个字符串编码成Unicode的字节串 返回值为b'\u4f60'
    print('u4f60') #等价于 print(a) 等价于 print('你'),系统实际打出时会进行以下操作
    print('u4f60'.encode("utf-8").decode("utf-8"))
    #python默认使用utf-8编码,将Unicode的字符转化为utf-8格式,然后在查看codepage表对应的值,显示出“你”这个字符串

    以下是搞了很久脑子的问题。

    print(b'u4f60'.decode("unicode-escape")) #返回“你”,这里b'u4f60'是Unicode的字节串,所以需要解码成Unicode字符
    print('u4f60'.encode("utf-8").decode("utf-8")) #返回“你” 此处“u4f60”和“你”等价,将将Unicode编码成utf-8格式,然后根据codepage表解码成“你”

    以下因为钻牛角尖了,所以把自己搞混乱了,想通后整理内容如下。

    “你”的Unicode字节串是b'\u4f60'
    “你”的utf-8的字节串是b'xe4xbdxa0'
    由于python3是字符串都是Unicode格式,默认编码格式是utf-8
    所以print('u4f60')会默认将它当成Unicode格式来解码成utf-8的字符串来显示。
    所以个人理解是print('u4f60')打印给用户查看的返回值计算机做的操作是print('u4f60'.encode("utf-8").decode("utf-8"))
    而print('xe4xbdxa0')打印乱码是因为在Unicode的codepage表中代表的就是乱码(除非python把字符串都变成utf-8格式,那么就能正常显示“你”)

  • 相关阅读:
    个人介绍
    实验三
    第二次实验
    实验一
    ATM管理系统
    第二次作业
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及应用
    实验二 K-近邻算法及应用
    实验一 感知器及其应用
  • 原文地址:https://www.cnblogs.com/smlie/p/8150685.html
Copyright © 2011-2022 走看看