zoukankan      html  css  js  c++  java
  • 通过python3学习编码

    简介

    今天在写python程序的时候,遇到了编码问题,今天,我准备好好了解一下编码问题

    ASCII编码

    计算机是美国人发明的,最初只有不超过256字符需要编码,1字节能编码2**8个,所以ASCII编码就是这么来的。现在的键盘,不用输入法能打出来的字符,都在ASCII码表里。

    其他编码

    后来,计算机逐渐普及,需要编码其他国家的字符,比如中文,日文,韩文,中国有GB2312等(当然,会占用多个字节),其他国家也有各自的编码表。但是这有个问题,如果一串字符有多个国家的语言,无法处理。

    Unicode

    Unicode将各种国家字符统一编码。这样便解决了统一编码的问题。Unicode非常适合在内存中使用,同一种语言,编码格式是相近的,便于计算。但是,当需要存储的时候,就不太合适了,浪费空间。

    ustring = '中'
    print('--- Unicode ---')
    ubyte = ustring.encode('unicode_escape')
    print(len(ubyte))
    print(ubyte)  # 直接输出第一个是转义
    print(''.join([chr(c) for c in ubyte]))
    

    输出结果:

    --- Unicode ---
    6
    b'\u4e2d'
    u4e2d
    

    可以看到,一个中文的字,就占了6个字节,编码其实只有4个字节4e2d,但u,也要存储

    UTF-8

    为了便于减小传输和存储的大小,UTF-8编码出现了。同样是

    print('--- UTF-8 ---')
    ubyte = ustring.encode('utf-8')
    print(len(ubyte))
    print(ubyte)
    print(''.join([chr(c) for c in ubyte]))
    

    输出如下:

    --- UTF-8 ---
    3
    b'xe4xb8xad'
    ä¸-
    

    只占用了3个字节,x是python加上去的,代表16进制方式读取,也就是e4, b8, ad这三个字节。可能会有人不知道e4为啥是一个字节,16进制和2进制对应如下,占4位,一个字节8位,所以是两个字符

    0 = 0000
    1 = 0001
    ...
    a = 0110
    ...
    e = 1110
    f = 1111
    

    json的编码

    为啥今天我会想好好了解一下编码呢,因为我在编程的时候用到了json,有趣的是,python中json的编码方式默认使用的不是utf-8,而是unicode,我还傻傻分不清楚,晕了半天。不过使用json.dumps和json.loads其实根本遇不到这个问题

  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/10642534.html
Copyright © 2011-2022 走看看