成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你 UTF-8 亂碼,關我 Unicode 什么事

開發 前端
相信很多同學也有類似的經歷,并且在查找解決辦法的過程中會碰到 UTF-8、Unicode、GBK、GB2312 等等一堆的代號。之后呢,通過復制粘貼順利的解決問題。

平時開發的時候,相信很多人都碰到過亂碼的問題,尤其是中文亂碼。多年以前,我學 Python 的時候碰到的第一個難題就是亂碼問題,差點《從入門到放棄了》。

當時就是寫一段 Python 的 Hello World 程序,只不過是把 Hello World 換成了中文輸出,結果你猜怎么著?亂碼了。

后來發現是因為 ASCII 編碼和 UTF-8 的問題,Python 默認使用了 ASCII ,而我寫的中文并不包含在 ASCII 碼范圍內,要改成 UTF-8。就是在 Python 文件的開頭加入下面這一行。

# -*- coding:utf-8 -*-

由于當時這個亂碼問題印象深刻,以至于多年之后,雖然很長時間不怎么寫 Python了,但這一行代碼我仍然能夠快速的敲出來,并且一個空格都不差。

相信很多同學也有類似的經歷,并且在查找解決辦法的過程中會碰到 UTF-8、Unicode、GBK、GB2312 等等一堆的代號。之后呢,通過復制粘貼順利的解決問題。

今天,我們就來理一理 Unicode 和 UTF-8 ,以及其他各種各樣的代號之間的關系。

Unicode - 統一碼

始皇嬴政“車同軌,書同文,統一度量衡”的目的是什么,就是為了統一標準,就是現在的ISO國際標準啊。

Unicode 真正做到了“書同文”的計算機語言標準,所以 Unicode 也叫統一碼、萬國碼。Unicode 也是在不斷更新的,過一段時間就要把新形成的文字加進去,比如 emoj 字符([愛心][慶祝])。就算有一天外星人來了,也得把外星人的文字加進去。到時候可能就得改名字叫太陽系碼、宇宙碼了。

Unicode 是一種計算機字符集標準,它就像是一部世界通用的字典,里面包含了幾乎所有的文字集合,包括中文、英文、拉丁文、希臘文等等,以及每一種語言中的符號。

阿拉伯數字 「0」的 Unicode 碼就是 U+0030,漢字「中」的 Unicode 碼就是 U+4E2D,這是固定不變的,符號U+是為了表示這是 Unicode 字符。

你翻開這個字典,找到第0030頁,里面就寫這阿拉伯數字「0」,翻開第4E2D頁,上面就寫著漢字「中」。Unicode 碼是用十六進制表示的,0030是十六進制的0x0030,4E2D是十六進制的 0x4E2D。

下面這幅圖,假設右上角有一盞燈,照著上層深顏色的 Unicode 碼,透過Unicode碼,投影出來的就是對應的具體字符。(比如做一個旁白,沒有美術功底,效果做的不太行)。

圖片圖片

Unicode 字符映射

Unicode 其實就是用十六進制的 0x0000到0x10FFFF 這個范圍內的數字表示的。實際上,是根本用不到這么多的??聪旅孢@個表格,Unicode 被分為17個 Plane(平面),每個平面都有自己的功能,并且大多數平面都是不使用或者很少使用的。

圖片圖片

通常我們用到的字符都是在第0號平面的,也叫基本多文種平面,也就是0x0000到0xFFFF這個區間內的。這個區間能表示2的16次方個字符,也就是65536個。拉丁文、常用的東亞文字都在這個區間內。

為什么是65536個呢。一位16進制表示4位2進制,所以4位16進制,正好是二進制的16位,剛好可以表示2的16次方個數字,也就是65536個。

圖片圖片

16個平面怎么來的呢,就是在4位16進制前面又加了兩位,但是只用到了 0x00到0x10這個區間表示平面,16進制的10,剛好是16,從0到16,一共17個平面。

最常用的就是0號平面,但是1、2、3號平面也用到了一些,比如第2號平面就是放的一些罕見的漢字或地區方言用字,比如粵語的字喃。

至于那些未使用的平面,等將來有了類似于emoj這種字符種類越來越多,或者外星人來的時候用吧。

有了 Unicode 為什么還要 UTF-8

UTF-8 應該是開發過程中接觸最多的代號了,讀寫文件、數據庫等等都會提到它。

UTF-8 全稱是 8-bit Unicode Transformation Format,這就清楚了吧,是用來轉編Unicode碼的。除了UTF-8外,還有UTF-16、UTF-32 ,以及中國的 GB 18030 等。

圖片圖片

既然 Unicode 已經包含了所有字符,為什么還要用 UTF-8進行轉編呢,直接用 Unicode 碼不就好了嗎?原因就是如果用 Unicode 會浪費過多的空間,比如 ASCII 碼用256位就能全部覆蓋了,但是如果用 Unicode 呢,會多出好多空間來。不便于存儲以及傳輸。

所以,Unicode 只制定標準,不做具體實現,具體的實現方式就要依靠 UTF-8、GB18030 這些了。

拿 UTF-8 來說,它是一種可變長字符編碼,用ASCII碼能表示的就直接用ASCII碼,不行的再想辦法,主打一個能省則省。

可以用文本編輯器測試一下,寫一個英文字母,用 UTF-8 編碼保存,大小是1個字節。而如果寫一個漢字呢,就是3個字節。

同樣的,UTF-16、UTF-32都有自己的一套編碼方式,宗旨就是為了減小體積,提高效率。

為什么就亂碼了呢

你可以在記事本中寫入一個漢字,然后將編碼格式保存為 ANSI 。

圖片圖片

然后用其他的工具打開(不要用windows的記事本或寫字板,它倆會自動識別),我用 Sublime Text 打開,顯示的就是亂碼。

圖片圖片

這是因為將中文用 ASCII 編碼了,而ASCII字符集中根本不存在中文字符,存的什么東西也不知道。當其他工具用 UTF-8 編碼準備展示的時候,發現這存的什么東西,它根本不認識啊。最終顯示出來的只能是亂碼。

如下圖所示,分別用 GB18030 和 UTF-8 對Unicode進行編碼,無論你最后是在瀏覽器還是其他的應用程序內,只要支持對應的編碼,都可以正確的解析出對應的字符。

圖片圖片

而如果你將 UTF-8 編碼的字符,用其他的編碼方式進行解碼,那大概就沒那么順利了,出來的很可能是亂碼。例如下面這個,將UTF-8編碼后的E4B8AD 用 TMD-8(瞎說的)進行解碼,那出來就是????。

圖片圖片

GB2312、GB18030

此外,我們肯定還聽說過 GB2312、GB18030,那它們又是什么呢?

GB18030是GB2312的擴展版本(升級版),現在的標準就是GB18030,GB2312 可以不再使用了。

GB2312和GB18030即是字符集,又同時是編碼方式。

以前GB2312是專門為了中文以及少數民族字符設計的,隨著不斷的擴充,GB18030已經支持 Unicode  字符集了。

總結

  • Unicode 是字符集,不是編碼方式,只是一個標準。
  • 而 UTF-8、UTF-16 是專門針對于 Unicode 的編碼方式,用于存儲和傳輸。
  • 對于純中文的場景,也可以用GB18030。
  • 如果沒有特殊要求,最好還是用 UTF-8 編碼,放之四海而皆準,沒壞處。
責任編輯:武曉燕 來源: 古時的風箏
相關推薦

2021-05-12 07:43:02

LinuxUnicodeUTF-8

2020-09-21 08:56:00

GolangUnicode編碼

2024-05-29 13:05:44

2017-02-24 10:46:34

2024-01-04 12:53:00

Unicode字符UTF-8

2023-01-26 00:31:25

ASCIIBase64UTF-8

2011-08-25 09:43:51

UTF-8中文man

2010-09-29 11:29:18

UnicodeJ2ME

2023-04-04 07:14:21

OpenAIChatGPT

2016-12-13 10:13:18

PHPUTF-8實踐

2011-03-07 12:31:54

Filezilla

2017-11-20 09:37:43

Dubbo更新Spring Clou

2019-04-15 14:05:56

MySQLUTF-8數據庫

2020-09-22 09:05:45

MySQLUTF-8utf8mb4

2009-12-17 11:45:38

Linux UTF-8

2024-02-20 13:12:00

UnicodeUTF-8GB2312

2016-11-15 14:29:14

Linux文件編碼轉換

2022-01-18 10:14:51

開發Reac元宇宙

2010-01-08 11:52:37

ibmdwDB2

2011-07-29 14:08:26

iPhone UTF-8 XML
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91九色porny首页最多播放 | 欧美综合在线观看 | 欧美日韩国产中文 | 亚州一区二区三区 | 天天综合国产 | 在线观看视频一区 | 99精品免费 | 国产激情一区二区三区 | 久久精品成人 | 福利精品在线观看 | 成人免费视频在线观看 | 国产电影一区二区 | 91人人视频在线观看 | 91精品国产综合久久久动漫日韩 | 日本涩涩视频 | 激情欧美一区二区三区中文字幕 | 免费大黄视频 | 欧美一区二区三区在线视频 | 欧美一级在线 | 亚洲协和影视 | 亚洲精品在线视频 | 午夜精品网站 | 久久伊人一区 | 91久久久久久久久 | 黑人粗黑大躁护士 | 成人性视频免费网站 | 女生羞羞网站 | 亚洲男人天堂网 | 国产精品99久久久久久久久 | 在线观看电影av | 国产精品成人一区二区三区吃奶 | 91久久久久久久久久久久久 | 久久狠狠 | 国产98色在线 | 日韩 | 又黑又粗又长的欧美一区 | 亚洲精品久久久一区二区三区 | 一区二区视频在线观看 | 老司机精品福利视频 | 狠狠骚 | 中文字幕av网址 | 欧美日韩一 |