6.1.編碼/解碼器的基本概念

1.Introduction

  • 編碼(encode) /解碼(decode)

    • 編碼就是將字符轉為位元組的過程與演算法

    • 解碼就是將位元組轉為字符的過程與演算法

  • 字符集 (字碼)

    • 各種文字及符號的總稱, 例如常見的有:

      • ASCII

      • GBK

      • Unicode

    • 以Unicode編碼為例, 其字碼為4~6個16進位數字, 並在前面加上U+

      • 英文字母A的Unicode字碼: U+0041

      • 歐元符號: U+20AC

  • 字符編碼

    • 字符集轉為二進位

    • 例如ASCII字符編碼可將ASCII字符集中的128個字符轉為二進制

    • 代表字元的位元組會根據使用的編碼而定, 例如Unicode只定義了字符集以及每個字符對應到的唯一編碼值(code point), 編碼演算法則有UTF-8, UTF-16, UTF-32

    • 編碼是一種演算法, 可互相轉換字碼

      • 以A的位元組為例

        • UTF-8編碼: \x41

        • UTF-16LE編碼: \x41\x00

2.Python的操作

  • Python中的字串類型有兩種: str跟bytes, 也就是對應到前一個部分所說的字符轉為位元組(16進位),

    • python編輯界面和運行界面, 通常都是默認str為unicode編碼

    • unicode str的表示方式有兩種: u'字符串'或者'\u四位16進位數'. 它們是等價的, 而且都是str對象

    • 當bytes中的字節符合ASCII碼的可顯示字符時, 這個字節就會按照ASCII碼來顯示, 否則就會以16進位顯示

     >>> u'\x40\x41'
    u'@A'
  • 若要宣告的字串為bytes形式, 可以在字串前加上b

    >>> b'\x40\x41' 
    '@A'
  • str可以通過encode轉化为bytes, bytes可以通過decode轉化为str

    s = 'cafe'
    # str 'cafe'有四個unicode字元

    >>> b= s.encode('utf8')
    >>> b
    'cafe'
    # 用utf-8將str編碼成bytes

    >>> b.decode('utf8')
    u'cafe'
    # 用utf-8將bytes編碼成str

Last updated