常見的字符編碼有哪些?有什么區別?

目錄

面試回答

知識擴展

Unicode 和 UTF-8 有啥關系?

有了 UTF-8,為什么要出現 GBK

為什么會出現亂碼


面試回答

就像電報只能發出“滴”和“答”聲一樣,計算機只認為 0 和1 兩種字符,但是,人類的文字是多種多樣的,如何把人類的文字轉換成計算機認識的 0、1 字符呢,這個過程同樣需要通過字符編碼

字符編碼(Character encoding)是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其他東西的一個集合(如號碼或電脈沖)進行配對。

和摩爾斯電碼功能類似,上個世紀60年代,美國制定了一套字符編碼,對英語字符與二進制位之間的關系,做了統一規定,這被稱為 ASCII 碼,一直沿用至今。

由于 ASCII 只有 128 個字符,雖然對于英文字符都可以表示了,但是世界上還有很多其他的文字是沒辦法表示的,所以需要一種更加全面的字符編碼。

于是又出現了 Unicode 字符集(常見的 Unicode Transformation Format 有:UTF-7,UTF-7.5,UTF-8,UTF-16,以及 UTF-32),除此之外還有一些常用的中文編碼有 GBK,GB2312,GB18030 等。

知識擴展

Unicode 和 UTF-8 有啥關系?

Unicode (中文:萬國碼、國際碼、統一碼、單一碼)是計算機科學領域里的一項業界標準。它對世界上大部分的文字系統進行了整理、編碼,使得計算機可以用更為簡單的方式來呈現和處理文字。

Unicode 備受認可,并廣泛地應用于計算機軟件的國際化與本地化過程。有很多新科技,如可擴展置標語言(Extensible Markup Language,簡稱:XML)、Java 編碼語言以及現代的操作系統,都采用 Unicode 編碼。

Unicode 是一套通用的字符集,包含世界上的大部分文字,也就說,Unicode 是可以表示中文的。

但是,Unicode 雖然統一了全世界字符的編碼,但沒有規定如何存儲。

因為如果 Unicode 統一規定,每個符號就要用三個或四個字節表示,因為字符太多,只能用這么多字節才能表示完全。一旦這么規定,那么每個英文字母前都必然有二到三個字節是0,因為所有英文字母在 ASCII 中都有,都可以用一個字節表示,剩余字節位置就要補充 0,。如果這樣,文本文件的大小會因此大出二三倍,這對于存儲來說是極大的浪費。

為了解決這個問題,就出現了一些中間格式的字符集,他們被稱為通用轉換格式,即 UTF(Unicode Transformation Format)。常用的 UTF 格式與:UTF-7,UTF-7.5,UTF-8,UTF-16,以及 UTF-32。

  • UTF-8 使用一至四個字節為每個字符編碼
  • UTF-16 使用二或四個字節為每個字符編碼
  • UTF-32 使用四個字節為每個字符編碼

所以我們可以說,UTF-8、UTF-16 等都是 Unicode 的一種實現方式。

有了 UTF-8,為什么要出現 GBK

因為 UTF-8 是 Unicode 的一種實現,所以他包含了世界上的所有文字編碼,他采用的是 1-4 字節進行編碼。

對于那些排在前面優先納入的文字,可能就優先使用 1 字節、2字節存儲了,對于納入的文字,就要使用 3 字節或者 4 字節存儲了。

正是因為 UTF-8 太全了,所以那些晚一些納入的字符,在 UTF-8 中的存儲所占的字節數可能就會多一些,那他的存儲空間要求就會很大。

對于常用的漢字,在 UTF-8 中采用 3 字節進行編碼,但是如果有一種只包含中文和 ASCII 的編碼的話,就不需要使用 3 個字節,可能 2 個字節就夠了。

對于大部分網站來說,基本都是只服務一個國家或者地區的,比如一個中國的網站,一般會出現簡體字和繁體字以及一些英文字符,很少會出現日語或者韓文的。

也是出于這樣的考慮,中國國家標準總局于 1981 年制定并實施了 GB 2312-80 編碼,即中華人民共和國國家標準簡體中文字符集。后來廠商微軟利用 GB 2312-80 未使用的編碼空間,收錄 GB 13000.1-93 全部字符制定了 GBK 編碼。

有了標準中文字符集,如果是一個純中文網站,就可以采用這種編碼方式,這樣可以大大節省一些存儲空間的。

常用的中文編碼有 GBK,GB2312,GB18030 等,最常用的是 GBK。

  • GB2312(1980年):16位字符集,收錄有 6763 個簡體漢字,682 個符號,共 7445 個字符;
    • 優點:適用于簡體中文環境,屬于中國國家標準,通行于大陸,新加坡等地也使用此編碼;
    • 缺點:不兼容繁體中文,其漢字集合過少
  • GBK(1995年):16位字符集,收錄有 21003 個漢字,883 個符號,共 21886 個字符;
    • 優點:適用于簡繁中文共存的環境,為簡體 Windows 所使用,向下完全兼容 gb2312,向上支持 ISO-10646 國際標準;所有字符都可以一對一映射到 unicode 2.0 上;
    • 缺點:不屬于官方標準,和 big5 之間需要轉換;很多搜索引擎都不能很好地支持 GBK 漢字。
  • GB18030(2000年):32 位字符集;收錄了 27484 個漢字,同時收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。
    • 優點:可以收錄所有你能想到的文字和符號,屬于中國最新的國家標準;
    • 缺點:目前支持它的軟件較少。

為什么會出現亂碼

文件里面的內容歸根到底都是由 0101 組成的,至于 0101 的二進制碼如何轉成人們可以理解的字符串,則是需要通過規定好的字符編碼標準進行轉換才可以。

我們把一串中文字符通過 UTF-8 進行編碼傳輸給別人,別人拿到這串文字之后,通過 GBK 進行解碼,得到的內容就會是亂碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39855.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39855.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39855.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

B樹和B+樹區別

B樹和B樹的區別 B樹 B樹被稱為平衡樹,在B樹中,一個節點可以有兩個以上的子節點。B樹的高度為log M N。在B樹中,數據按照特定的順序排序,最小值在左側,最大值在右側。 B樹是一種平衡的多分樹,通常我們說m階…

什么是網絡地址轉換 (NAT)

網絡地址轉換(NAT)是更改源和目標 IP 地址和端口的過程,地址轉換減少了對 IPv4 公共地址的需求,并隱藏了專用網絡地址范圍,該過程通常由路由器或防火墻完成。 NAT是如何工作的 NAT 允許單個設備(如路由器…

rhel 8.7 部署 keepalived+haproxy 實現 mysql 雙主高可用場景

文章目錄 [toc]部署 mysql關閉防火墻關閉 selinux創建相關目錄創建 mysql 用戶配置 PATH 變量驗證 mysql 命令切換到 mysql 用戶在 172.72.0.116 生成配置文件在 172.72.0.137 生成配置文件mysql 初始化啟動 mysql 服務修改 mysql 的 root 用戶密碼配置主從關系172.72.0.137 配…

數字化格局下的引領者:百望云通過強制性國家標準GB18030-2022最高級別認證

8月1日,強制性國家標準GB 18030-2022《信息技術 中文編碼字符集》實施。8月15日,百望云“綠頁閱讀器”正式通過中國電子技術標準化研究院強制性國家標準GB18030-2022《信息技術 中文編碼字符集》最高級(實現級別3)認證,彰顯了百望云在數字化信息處理領域對標國家標準的卓越技術…

Android CameraX適配Android13的踩坑之路

AndroidCameraX適配Android13的踩坑之路 前言: 最近把AGP插件升級到8.1.0,新建項目的時候目標版本和編譯版本都是33,發現之前的demo使用Camerax拍照和錄像都失敗了,于是查看了一下官網和各種資料,找到了Android13的適…

網絡編程(12): TCP重傳、滑動窗口、流量控制、擁塞控制

1、TCP重傳機制 通過序列號和確認號確保可靠傳輸,當發送端發送數據給接收到,接收端會返回一個確認號,表示收到消息了 超時重傳:沒有在指定時間內收到ACK報文 超時重傳的兩種可能:數據包丟失、確認包丟失超時重傳時間RT…

第十三課:QtCmd 命令行終端應用程序開發

功能描述:開發一個類似于 Windows 命令行提示符或 Linux 命令行終端的應用程序 一、最終演示效果 QtCmd 不是因為它是 Qt 的組件,而是采用 Qt 開發了一個類似 Windows 命令提示符或者 Linux 命令行終端的應用程序,故取名為 QtCmd。 上述演示…

FreeMarker系列--list的用法(長度,遍歷,下標,嵌套,排序)

原文網址&#xff1a;FreeMarker系列--list的用法&#xff08;長度,遍歷,下標,嵌套,排序&#xff09;_IT利刃出鞘的博客-CSDN博客 簡介 本文介紹FreeMarker的list的用法。 大小 Java ArrayList<String> list new ArrayList<String>(); Freemaker ${list?s…

W5500-EVB-PICO 做UDP Server進行數據回環測試(七)

前言 前面我們用W5500-EVB-PICO 開發板在TCP Client和TCP Server模式下&#xff0c;分別進行數據回環測試&#xff0c;本章我們將用開發板在UDP Server模式下進行數據回環測試。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram P…

圖數據庫_Neo4j學習cypher語言_使用CQL命令002_刪除節點_刪除屬性_結果排序Order By---Neo4j圖數據庫工作筆記0006

然后我們再來看如何刪除節點 可以看到首先 我們這里 比如我要刪除張三 可以看到 match (n:student) where n.name = "張三" delete n 這樣就是刪除了student集合中,name是張三的節點 然后我們再來看 如何來刪除關系 match (n:student)-[r]->(m:student) where…

機器學習、cv、nlp的一些前置知識

為節省篇幅&#xff0c;不標注文章來源和文章的問題場景。大部分是我的通俗理解。 文章目錄 向量關于向量的偏導數&#xff1a;雅可比矩陣二階導數矩陣&#xff1a;海森矩陣隨機變量隨機場伽馬函數beta分布數學術語坐標上升法協方差訓練集&#xff0c;驗證集&#xff0c;測試集…

Nginx的安裝及負載均衡搭建

一.Nginx的安裝 1&#xff09;準備安裝環境 yum install -y make gcc gcc-c pcre-devel pcre zlib zlib-devel openssl openssl-develPERE PCRE(Perl Compatible Regular Expressions)是一個Perl庫&#xff0c;包括 perl 兼容的正則表達式庫。 nginx的http模塊使用pcre來解…

前端jd要求:了解一門后端開發語言優先 解決方案之Node.js

前端jd要求&#xff1a;了解一門后端開發語言優先 解決方案之Node.js 前言常見的后端開發語言一、什么是 Node.js二、學習 Node.js 的前置知識三、學習 Node.js 的步驟1、Node.js 的安裝2、Node.js 的基本語法和 API模塊導入和導出文件讀寫操作HTTP 服務器命令行參數 3、Node.j…

可能導致不可接受的信息安全事件發生的核電站事故。

立陶宛伊格納利納核電站&#xff08;1992 年&#xff09; 一名在該核電站工作的程序員將惡意代碼上傳到一個負責反應堆子系統運行的自動化系統中&#xff0c;該系統被及時發現。 但如果沒有及時發現&#xff0c;誰知道會發生什么呢&#xff1f;核電站被關閉以進行調查。有關這…

Vue-8.集成(.editorconfig、.eslintrc.js、.prettierrc)

介紹 同時使用 .editorconfig、.prettierrc 和 .eslintrc.js 是很常見的做法&#xff0c;因為它們可以在不同層面上幫助確保代碼的格式一致性和質量。這種組合可以在開發過程中提供全面的代碼維護和質量保證。然而&#xff0c;這也可能增加一些復雜性&#xff0c;需要謹慎配置…

Coreutils工具包,Windows下使用Linux命令

之前總結過兩篇有關【如何在Windows系統下使用Linux的常用命令】的文章&#xff1a; GnuWin32&#xff0c;Windows下使用Linux命令 UnxUtils工具包&#xff0c;Windows下使用Linux命令 今天再推薦一個類似的工具包Coreutils 一、簡介 GNU core utilities是GNU操作系統基本…

【HDFS】hdfs的count命令的參數詳解

Usage: hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] [-s] <paths

(學習筆記-進程管理)怎么避免死鎖?

死鎖的概念 在多線程編程中&#xff0c;我們為了防止多線程競爭共享資源而導致數據錯亂&#xff0c;都會在操作共享資源之前加上互斥鎖&#xff0c;只有成功獲得到鎖的線程&#xff0c;才能操作共享資源&#xff0c;獲取不到鎖的線程就只能等待&#xff0c;直到鎖被釋放。 那…

創建一個簡單的HTML Viewer應用程序

使用wxPython和內嵌瀏覽器來創建一個簡單的HTML Viewer應用程序。 在本篇文章中&#xff0c;我們將使用Python和wxPython模塊來創建一個簡單的HTML Viewer應用程序。這個應用程序可以讓用戶輸入HTML內容&#xff0c;并在內嵌瀏覽器中顯示該內容的效果。 準備工作 在開始之前…

apache doris和StarRocks的區別

記錄一下最新要用到2個新數據庫的區別 Apache Doris是一個分布式的列式存儲系統&#xff0c;它的設計目標是提供大規模數據處理的可靠性和高性能。Doris采用了集群方式&#xff0c;通過將數據分布在多個機器上進行處理來提高性能&#xff0c;并提供了SQL查詢接口方便用戶使用。…