日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

你 UTF-8 亂碼,關(guān)我 Unicode 什么事

來源: 責(zé)編: 時間:2023-12-08 09:14:09 266觀看
導(dǎo)讀平時開發(fā)的時候,相信很多人都碰到過亂碼的問題,尤其是中文亂碼。多年以前,我學(xué) Python 的時候碰到的第一個難題就是亂碼問題,差點《從入門到放棄了》。當(dāng)時就是寫一段 Python 的 Hello World 程序,只不過是把 Hello World

平時開發(fā)的時候,相信很多人都碰到過亂碼的問題,尤其是中文亂碼。多年以前,我學(xué) Python 的時候碰到的第一個難題就是亂碼問題,差點《從入門到放棄了》。SEo28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)時就是寫一段 Python 的 Hello World 程序,只不過是把 Hello World 換成了中文輸出,結(jié)果你猜怎么著?亂碼了。SEo28資訊網(wǎng)——每日最新資訊28at.com

后來發(fā)現(xiàn)是因為 ASCII 編碼和 UTF-8 的問題,Python 默認使用了 ASCII ,而我寫的中文并不包含在 ASCII 碼范圍內(nèi),要改成 UTF-8。就是在 Python 文件的開頭加入下面這一行。SEo28資訊網(wǎng)——每日最新資訊28at.com

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

由于當(dāng)時這個亂碼問題印象深刻,以至于多年之后,雖然很長時間不怎么寫 Python了,但這一行代碼我仍然能夠快速的敲出來,并且一個空格都不差。SEo28資訊網(wǎng)——每日最新資訊28at.com

相信很多同學(xué)也有類似的經(jīng)歷,并且在查找解決辦法的過程中會碰到 UTF-8、Unicode、GBK、GB2312 等等一堆的代號。之后呢,通過復(fù)制粘貼順利的解決問題。SEo28資訊網(wǎng)——每日最新資訊28at.com

今天,我們就來理一理 Unicode 和 UTF-8 ,以及其他各種各樣的代號之間的關(guān)系。SEo28資訊網(wǎng)——每日最新資訊28at.com

Unicode - 統(tǒng)一碼

始皇嬴政“車同軌,書同文,統(tǒng)一度量衡”的目的是什么,就是為了統(tǒng)一標準,就是現(xiàn)在的ISO國際標準啊。SEo28資訊網(wǎng)——每日最新資訊28at.com

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

Unicode 是一種計算機字符集標準,它就像是一部世界通用的字典,里面包含了幾乎所有的文字集合,包括中文、英文、拉丁文、希臘文等等,以及每一種語言中的符號。SEo28資訊網(wǎng)——每日最新資訊28at.com

阿拉伯?dāng)?shù)字 「0」的 Unicode 碼就是 U+0030,漢字「中」的 Unicode 碼就是 U+4E2D,這是固定不變的,符號U+是為了表示這是 Unicode 字符。SEo28資訊網(wǎng)——每日最新資訊28at.com

你翻開這個字典,找到第0030頁,里面就寫這阿拉伯?dāng)?shù)字「0」,翻開第4E2D頁,上面就寫著漢字「中」。Unicode 碼是用十六進制表示的,0030是十六進制的0x0030,4E2D是十六進制的 0x4E2D。SEo28資訊網(wǎng)——每日最新資訊28at.com

下面這幅圖,假設(shè)右上角有一盞燈,照著上層深顏色的 Unicode 碼,透過Unicode碼,投影出來的就是對應(yīng)的具體字符。(比如做一個旁白,沒有美術(shù)功底,效果做的不太行)。SEo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片SEo28資訊網(wǎng)——每日最新資訊28at.com

Unicode 字符映射

Unicode 其實就是用十六進制的 0x0000到0x10FFFF 這個范圍內(nèi)的數(shù)字表示的。實際上,是根本用不到這么多的。看下面這個表格,Unicode 被分為17個 Plane(平面),每個平面都有自己的功能,并且大多數(shù)平面都是不使用或者很少使用的。SEo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片SEo28資訊網(wǎng)——每日最新資訊28at.com

通常我們用到的字符都是在第0號平面的,也叫基本多文種平面,也就是0x0000到0xFFFF這個區(qū)間內(nèi)的。這個區(qū)間能表示2的16次方個字符,也就是65536個。拉丁文、常用的東亞文字都在這個區(qū)間內(nèi)。SEo28資訊網(wǎng)——每日最新資訊28at.com

為什么是65536個呢。一位16進制表示4位2進制,所以4位16進制,正好是二進制的16位,剛好可以表示2的16次方個數(shù)字,也就是65536個。SEo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片SEo28資訊網(wǎng)——每日最新資訊28at.com

16個平面怎么來的呢,就是在4位16進制前面又加了兩位,但是只用到了 0x00到0x10這個區(qū)間表示平面,16進制的10,剛好是16,從0到16,一共17個平面。SEo28資訊網(wǎng)——每日最新資訊28at.com

最常用的就是0號平面,但是1、2、3號平面也用到了一些,比如第2號平面就是放的一些罕見的漢字或地區(qū)方言用字,比如粵語的字喃。SEo28資訊網(wǎng)——每日最新資訊28at.com

至于那些未使用的平面,等將來有了類似于emoj這種字符種類越來越多,或者外星人來的時候用吧。SEo28資訊網(wǎng)——每日最新資訊28at.com

有了 Unicode 為什么還要 UTF-8

UTF-8 應(yīng)該是開發(fā)過程中接觸最多的代號了,讀寫文件、數(shù)據(jù)庫等等都會提到它。SEo28資訊網(wǎng)——每日最新資訊28at.com

UTF-8 全稱是 8-bit Unicode Transformation Format,這就清楚了吧,是用來轉(zhuǎn)編Unicode碼的。除了UTF-8外,還有UTF-16、UTF-32 ,以及中國的 GB 18030 等。SEo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片SEo28資訊網(wǎng)——每日最新資訊28at.com

既然 Unicode 已經(jīng)包含了所有字符,為什么還要用 UTF-8進行轉(zhuǎn)編呢,直接用 Unicode 碼不就好了嗎?原因就是如果用 Unicode 會浪費過多的空間,比如 ASCII 碼用256位就能全部覆蓋了,但是如果用 Unicode 呢,會多出好多空間來。不便于存儲以及傳輸。SEo28資訊網(wǎng)——每日最新資訊28at.com

所以,Unicode 只制定標準,不做具體實現(xiàn),具體的實現(xiàn)方式就要依靠 UTF-8、GB18030 這些了。SEo28資訊網(wǎng)——每日最新資訊28at.com

拿 UTF-8 來說,它是一種可變長字符編碼,用ASCII碼能表示的就直接用ASCII碼,不行的再想辦法,主打一個能省則省。SEo28資訊網(wǎng)——每日最新資訊28at.com

可以用文本編輯器測試一下,寫一個英文字母,用 UTF-8 編碼保存,大小是1個字節(jié)。而如果寫一個漢字呢,就是3個字節(jié)。SEo28資訊網(wǎng)——每日最新資訊28at.com

同樣的,UTF-16、UTF-32都有自己的一套編碼方式,宗旨就是為了減小體積,提高效率。SEo28資訊網(wǎng)——每日最新資訊28at.com

為什么就亂碼了呢

你可以在記事本中寫入一個漢字,然后將編碼格式保存為 ANSI 。SEo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片SEo28資訊網(wǎng)——每日最新資訊28at.com

然后用其他的工具打開(不要用windows的記事本或?qū)懽职澹鼈z會自動識別),我用 Sublime Text 打開,顯示的就是亂碼。SEo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片SEo28資訊網(wǎng)——每日最新資訊28at.com

這是因為將中文用 ASCII 編碼了,而ASCII字符集中根本不存在中文字符,存的什么東西也不知道。當(dāng)其他工具用 UTF-8 編碼準備展示的時候,發(fā)現(xiàn)這存的什么東西,它根本不認識啊。最終顯示出來的只能是亂碼。SEo28資訊網(wǎng)——每日最新資訊28at.com

如下圖所示,分別用 GB18030 和 UTF-8 對Unicode進行編碼,無論你最后是在瀏覽器還是其他的應(yīng)用程序內(nèi),只要支持對應(yīng)的編碼,都可以正確的解析出對應(yīng)的字符。SEo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片SEo28資訊網(wǎng)——每日最新資訊28at.com

而如果你將 UTF-8 編碼的字符,用其他的編碼方式進行解碼,那大概就沒那么順利了,出來的很可能是亂碼。例如下面這個,將UTF-8編碼后的E4B8AD 用 TMD-8(瞎說的)進行解碼,那出來就是????SEo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片SEo28資訊網(wǎng)——每日最新資訊28at.com

GB2312、GB18030

此外,我們肯定還聽說過 GB2312、GB18030,那它們又是什么呢?SEo28資訊網(wǎng)——每日最新資訊28at.com

GB18030是GB2312的擴展版本(升級版),現(xiàn)在的標準就是GB18030,GB2312 可以不再使用了。SEo28資訊網(wǎng)——每日最新資訊28at.com

GB2312和GB18030即是字符集,又同時是編碼方式。SEo28資訊網(wǎng)——每日最新資訊28at.com

以前GB2312是專門為了中文以及少數(shù)民族字符設(shè)計的,隨著不斷的擴充,GB18030已經(jīng)支持 Unicode  字符集了。SEo28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

  • Unicode 是字符集,不是編碼方式,只是一個標準。
  • 而 UTF-8、UTF-16 是專門針對于 Unicode 的編碼方式,用于存儲和傳輸。
  • 對于純中文的場景,也可以用GB18030。
  • 如果沒有特殊要求,最好還是用 UTF-8 編碼,放之四海而皆準,沒壞處。

本文鏈接:http://www.www897cc.com/showinfo-26-39504-0.html你 UTF-8 亂碼,關(guān)我 Unicode 什么事

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 刷了360多道算法題,我終于頓悟了它的真諦

下一篇: Java 21 的虛擬線程:高性能并發(fā)應(yīng)用的福音

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據(jù)博主數(shù)碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 6月安卓手機好評榜:魅族20 Pro蟬聯(lián)冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優(yōu)酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 10天營收超1億美元,《星鐵》比《原神》差在哪?

    來源:伯虎財經(jīng)作者:陳平安即便你沒玩過《原神》,你一定聽說過的它的大名。恨它的人把《原神》開服那天稱作是中國游戲史上最黑暗的一天,有粉絲因為索尼在PS平臺上線《原神》,怒而
  • 當(dāng)家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當(dāng)家”的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計劃今年開放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發(fā)布

    2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據(jù)此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發(fā)布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
  • 微軟發(fā)布Windows 11新版 引入全新任務(wù)欄狀態(tài)

    近日,微軟發(fā)布了Windows 11新版,而Build 22563更新主要引入了幾周前曝光的平板模式任務(wù)欄等,系統(tǒng)更流暢了。更新中,Windows 11加入了專門針對平板優(yōu)化的任務(wù)欄
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學(xué)的小東加入了一個大學(xué)生兼職QQ群。群主“七王”在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 乐至县| 吴江市| 阳城县| 河间市| 榆中县| 天水市| 将乐县| 广南县| 上虞市| 稷山县| 虎林市| 杭州市| 武隆县| 盈江县| 闻喜县| 蒲江县| 叙永县| 黔东| 汉阴县| 南川市| 镇远县| 宜阳县| 西林县| 交口县| 红原县| 黑河市| 义马市| 镇康县| 五原县| 庐江县| 宁陕县| 留坝县| 内丘县| 和林格尔县| 武夷山市| 乳源| 来凤县| 化德县| 革吉县| 驻马店市| 芜湖县|