• 关于编码的理解


    一、字节

    关于编码的理解始于字节这一数据格式。整型转字节类型使用bytes()函数,其他进制转2进制使用bin()函数。

    1. 定义    

    字节是一系列单字节的组合,每一个字节都是[0, 255](无符号)范围内组成。
        单字节:一个字节8个数据位

    2. 转换 

    (1) 字符串和字节串的相互转化

        参考自:https://blog.csdn.net/baidu_19473529/article/details/80042582

     #bytes object
        byte = b"byte example"
    
        # str object
        str = "str example"
    
        # str to bytes 字符串转字节
        bytes(str, encoding="utf8")
    
        # bytes to str  字节转字符串
        str(bytes, encoding="utf-8")
    
        # an alternative method
        # str to bytes  字符串转为字节
        str.encode(str)
    
        # bytes to str  字节转为字符串
        bytes.decode(bytes)

    (2) 单字节(单字符串)和二进制(ASCII码)的转换 ---ord() / chr()

    # 用户输入字符
    c = input("请输入一个字符: ")
     
    # 用户输入ASCII码,并将输入的数字转为整型
    a = int(input("请输入一个ASCII码: "))
     
    print( c + " 的ASCII 码为", ord(c))
    print( a , " 对应的字符为", chr(a))

        运行结果:

    请输入一个字符: a
    请输入一个ASCII码: 101
    a 的ASCII 码为 97
    101  对应的字符为 e

     (3) 单字节(单字符串)和十进制的转换

    #字节串转整数:
    转义为short型整数: struct.unpack('<hh', bytes(b'x01x00x00x00'))  ==>  (1, 0)
    转义为long型整数: struct.unpack('<L', bytes(b'x01x00x00x00'))  ==>  (1,)
    #------------------
    #整数转字节串:
    转为两个字节: struct.pack('<HH', 1,2)  ==>  b'x01x00x02x00'
    转为四个字节: struct.pack('<LL', 1,2)  ==>  b'x01x00x00x00x02x00x00x00'

    二、 编码

    1. ASCII码 

           是美国标准信息交换代码(American Standard Code for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。

        ASCII 码的数字范围: 48 --- 57

                  大写字母范围: 65 --- 90

                  小写字母范围: 97 --- 122

    2. Unicode 

        Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

    3. UTF压缩过的(Unicode) 

            UTF-8是一种可变宽度 字符编码,能够使用一到四个8位字节对Unicode中的所有1,112,064 [1]个有效代码点进行编码。

        优势

            UTF-8最大的优势是,没有字节序的概念。所以特别适合用于字符串的网络数据传输,不用考虑大小端问题。对于非英文网页(对于我们而言,简单说东亚文字网页),能够避免各种乱码问题。

        劣势

            本地字符串处理过程中,如果使用UTF-8,对于英文字符的处理没有太大的问题。一个char变量表示一个英文字符。但是对于中文等远东字符集来说,就比较坑爹了。char str[]; str[0]并不能完整表示一个汉字。UTF-8编码格式下,一个汉字需要至少3个char才能表示。这对于通过下标来操作字符串的操作来说是非常痛苦的一件事情。

    4. GBK 

            GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字。

     



  • 相关阅读:
    如何判断点击是否在区域内
    WCF SSL(应用篇-Message)-02
    WCF SSL(证书篇)-01
    获取浏览客户的地址信息
    ASP.Net Controls 用法大全
    C#实现倒油算法
    C#操作Excel(读取)
    C#提取字符串中的数字字符串
    对比MFC和Winform及WPF
    C#图片水印代码整理
  • 原文地址:https://www.cnblogs.com/geoffreyone/p/9899782.html
Copyright © 2020-2023  润新知