最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

[oeasy]python0132_[專業(yè)選修]utf-8_unicode_transformation_format_8_編碼

2023-04-10 18:02 作者:oeasy  | 我要投稿

utf-8

回憶上次內(nèi)容

  • 上次再次輸出了大紅心<span style="color:red">?</span>

    • 找到了紅心對應(yīng)的編碼

    • 黑紅梅方都對應(yīng)有編碼

  • 原來的編碼叫做 ascii?

    • \u這種新的編碼方式叫unicode

    • 包括了 中日韓字符集等 各書寫系統(tǒng)的字符集

  • 但是有個問題

    • 拜這個字

    • 在字節(jié)中應(yīng)該是b"\x62\xdc"兩個字節(jié)

  • 該如何理解b"\x62\xdc"這兩個字節(jié)呢???

    • 究竟是"拜"

    • 還是"bü"呢?

在文件系統(tǒng)中驗證

  • 首先進入 vi

  • 然后在插入模式下寫一個

    • 點擊桌面上的sougo圖表

    • 在右下角的鍵盤位置選擇中文

    • 然后就可以輸入中文了

  • :%!xxd

    • 4e00

    • 兩個字節(jié)

    • e4b880

    • 三個字節(jié)

    • 存儲的狀態(tài)是

    • 并不是unicode對應(yīng)的

    • 我們還是得區(qū)分一下概念

    字符集和字符集編碼

    • 字符集(Character-Set)是

      • ord

      • chr

      • 指的是字符和序號之間的對應(yīng)關(guān)系

      • 函數(shù)是

    • 字符集編碼(Character-Set Encoding)

      • encode

      • decode

      • 指的是把字符集里面的所有字符

      • 放到計算機的字節(jié)里

      • 函數(shù)是

    • ascii、gb2312、BIG5

      • 既是字符集

      • 又是字符編碼

    • unicode如何呢?

    unicode

    • 一般來講unicode是字符集

      • 可以用ord和chr

      • 但Unicode一般不做字符集編碼

    • 用字符集什么來進行字符編碼呢?

    utf-8

    • utf-8 是一種可變長度的字符編碼格式

      • 有的時候 1 字節(jié) 利用他省空間

      • 有的時候 2 字節(jié) 利用他很平衡

      • 有的時候 3 字節(jié) 利用他范圍廣

      • 再往后 利用的更是他范圍廣

    • 這不就兩方面好處都得到了么

    • utf-8 的意思是

      • Unicode Transformation Format – 8-bit

    • 這和 unicode 到底有什么區(qū)別呢?

    存儲規(guī)則

    • Unicode 是字符集

      • 找到每一個字符的唯一編碼

      • Universal Coded Character Set

      • 字符集:為每一個字符分配一個唯一的數(shù)字ID

      • (學名為碼位 / 碼點 / Code Point / 字符的身份證號)

      • 可以在 https://home.unicode.org/

    • utf-8 是 字符集編碼方案

      • 系統(tǒng)就知道這個到底是幾個字節(jié)存儲的

      • Unicode Transformation Format – 8-bit

      • 編碼規(guī)則:將「碼位」轉(zhuǎn)換為字節(jié)序列的規(guī)則(編碼/解碼 可以理解為 加密/解密 的過程)

      • 而且讀到字符之后

    具體編碼

    • 那這個東西怎么具體存儲和操作呢?

    • 一(4E00) 在上圖中

      • 屬于第三行的范圍

      • 從 0800-FFFF

      • 所以三個字節(jié)

    • 如下圖套入模板

    • 具體存儲的狀態(tài)呢?

    具體字節(jié)狀態(tài)

    • :%!xxd

    • 說明我們用的確實是utf-8編碼

    • 可以解碼回來嗎?

    • utf-8 解碼 E4B080 轉(zhuǎn)化為 unicode 編碼是 4E00

    • 后面的 0a 是 換行LineFeed

    • 或者叫做 NL(NewLine)

    • 如果是兩個

    動手

    • 兩個字符相同的

    • 得到兩個同樣的三字節(jié)utf-8存儲

    • 以及最后的

      • 或者叫做 NL(NewLine)

      • 0a 依然是 換行LineFeed

    • 可以在反匯編指令層面中看到么???

    反編譯

    • :%!xxd

      • 轉(zhuǎn)化為字節(jié)碼狀態(tài)

    • 漢字確實可以在字節(jié)碼狀態(tài)中觀察到

    編碼解碼

    • 第一次編碼

      • 把漢字編碼為 unicode

      • 具體就是把 編碼為 unicode 值 0x4e00這個編號

    • 第二次編碼

      • unicode 值編碼為 utf-8

      • 具體就是把 unicode 值 0x4e00 編碼為 0xe4b880

      • 可以落實到字節(jié)里

    • 第一次解碼

      • utf-8 解碼為 unicode

      • 具體就是把 utf-8 值 0xe4b880 解碼為 0x4e00

      • 把字節(jié)還原為序號

    • 第二次解碼

      • unicode 解碼為漢字

      • 具體就是把 0x4e00 解碼為

      • 找到序號對應(yīng)的字符

    • unicode編碼是utf-8存儲形式和具體漢字中間的橋梁

    驗證編碼

    • 原始字符串

      • "一"

    • 查看原始字符串utf-8編碼

      • "一".encode("utf-8")

    • 給utf-8編碼解碼

      • b"\xe4\xb8\x80".decode("utf-8")

    • 先編碼再解碼

      • "一".encode("utf-8").decode("utf-8")

    • 先解碼再編碼

      • b"\xe4\xb8\x80".decode("utf-8").encode("utf-8")

    • b"\xe4\xb8\x80"是幾個字節(jié)的類型呢?

    字節(jié)序列類

    • 前綴 b 表示 byte 字節(jié)

      • 后面的是 bytes類型對應(yīng)的 字節(jié)序列

    • \x 是前綴

      • b"\xe4\xb8\x80"是三個字節(jié)的序列

    默認編碼

    • utf-8 是系統(tǒng)默認的編碼格式

      • 一般都是這種編碼格式

    • 這一個字符就對應(yīng)三個字節(jié)

      • 可以用長度來描述字符么?

    字符長度

    • len()函數(shù)

      • 可以衡量出字符串的長度

      • 也可以衡量出編碼后字節(jié)序列的長度

    • ascii[0,127] 字符 的長度

      • 就是字節(jié)的長度

    • 漢字呢?

    漢字

    • 字母a對應(yīng)著一個字節(jié)

      • 漢字對應(yīng)著三個字節(jié)

    • 這個unicode的編碼空間

      • 究竟是怎么安排的呢?

    排好座次

    • 所有unicode字符 被分成了4檔

      • 2 字節(jié)

      • 3 字節(jié)

      • 4 字節(jié)

      • 1 字節(jié)

      • ascii

      • 后面的字符有可能用

      • 0開頭的

        • ascii

        • 英文字符和數(shù)字占據(jù)最大范圍兼容

      • 10開頭的

        • 拉丁

        • 希臘

        • 西里爾

        • 等等

        • 2 字節(jié)

        • 主要是拼音符號文字

      • 110開頭的

        • 首先是印度

        • 然后是雜項

        • 然后是符號

        • 日文假名

        • 然后是中日韓 CJK

        • 3 字節(jié)范圍內(nèi)

      • 11110開頭的

        • 4 字節(jié)

        • 表情符號emoji??

        • 各種擴展集

      極大擴展

      • unicode字符集 開始逐漸流行

        • utf-8所代表的存儲編碼也開始流行

      • 一旦一種編碼在世界上開始流行

        • 到了 2020 年 95%的網(wǎng)頁使用 unicode 編碼

        • 到了 2021 已經(jīng)達到了 97.4%

        • 他就會擠壓其他的編碼方式的生存空間

      • 感覺這是全球化一體最終的編碼方式

      • https://w3techs.com/technologies/overview/character_encoding

      字符大戰(zhàn)終局

      • 關(guān)于編碼的世界大戰(zhàn)

      • 分久必合

      • 最終的勝利者是unicode和utf-8

      • 他們彼此也可以相互轉(zhuǎn)化

      相互轉(zhuǎn)化

      • unicode形式

        • "\u4e00"

      • 把unicode編碼按照utf-8編碼

        • "\u4e00".encode("utf-8")

      • 先把unicode編碼為utf-8,再解碼回unicode

        • "\u4e00".encode("utf-8").decode("utf-8")

      • 把utf-8編碼解碼回unicode編碼

        • b"\xe4\xb8\x80".decode("utf-8")

      • 把utf-8編碼先解碼回unicode編碼,再編碼為utf-8

        • b"\xe4\xb8\x80".decode("utf-8").encode("utf-8")

      • 曾經(jīng)掌握了 ascii 碼和 ascii 字符的轉(zhuǎn)化方法

      • 也要掌握 unicode 和 utf-8 雙向轉(zhuǎn)化的方法

      • gb2312系列又如何了呢?

      gbk的演化

      • 80年的gb2312

      • 95年的gbk

      • 05年有了gb18030

      • 全稱:國家標準 GB 18030-2005《信息技術(shù)中文編碼字符集》

        • 是中華人民共和國現(xiàn)時最新的內(nèi)碼字集

        • 是 GB 18030-2000《信息技術(shù)信息交換用漢字編碼字符集基本集的擴充》的修訂版

      • 有多少字符了呢?

      字符集

      • GB 18030 與 GB 2312-1980 和 GBK 兼容

        • 采用多字節(jié)編碼

        • 每個字可以由 1 個、2 個或 4 個字節(jié)組成

        • 編碼空間龐大

        • 共收錄漢字<span style="font-size:80px">70244</span>個

        • 與 utf-8 相同

      • utf-8標準海納百川

      • GB18030用的人很少

        • 但始終依然存在

      • GB18030有什么作用呢???

      亂碼問題

      • 有的時候還會遇到 gb18030 編碼的文檔

        • 用 utf-8編碼方式

        • 打開 gb18030編碼 的文件

        • 就會亂碼

      • 這個時候可以在 vim 中使用命令

        • :edit ++enc=gb18030

      • 可以解決問題

      • gb18030 用的人少

        • 有用的人少的好處

        • 如果只會用utf-8解碼

        • 那么gb18030本身就構(gòu)成了加密系統(tǒng)

        • 只有懂漢語并且懂編碼才能看懂

        • 不懂的話只能見到亂碼

        • 想要自動翻譯都不行

      總結(jié)

      • 這次了解了unicodeutf-8

        • unicode是字符集

        • utf-8是一種可變長度的編碼方式

        • utf-8是實現(xiàn)unicode的存儲和傳輸?shù)默F(xiàn)實的方式

      • unicode讓字符范圍得到了極大擴展

        • unicode到底還擴展出什么好玩的字符呢???

      • 我們下次再說!??

      • 藍橋->https://www.lanqiao.cn/courses/3584

      • github->https://github.com/overmind1980/oeasy-python-tutorial

      • gitee->https://gitee.com/overmind1980/oeasypython


      [oeasy]python0132_[專業(yè)選修]utf-8_unicode_transformation_format_8_編碼的評論 (共 條)

      分享到微博請遵守國家法律
      安塞县| 丰原市| 虞城县| 宁南县| 富平县| 吉林市| 鹤峰县| 巴东县| 民权县| 黑山县| 尉犁县| 肥西县| 远安县| 兰坪| 兴隆县| 磐石市| 富宁县| 泰顺县| 基隆市| 将乐县| 临安市| 三明市| 滨州市| 舞阳县| 阳谷县| 临清市| 彝良县| 宜城市| 岳阳县| 松溪县| 荔浦县| 临泉县| 鄂伦春自治旗| 耿马| 嵩明县| 丽水市| 沙雅县| 安康市| 溆浦县| 仙游县| 油尖旺区|