字元編碼

来源:http://www.cnblogs.com/organic/archive/2016/11/19/6080971.html
-Advertisement-
Play Games

1. ASCII碼 1> ASCII碼不包括我們輸入法中的"特殊字元"和"數學字元"等,他們都屬於擴展ASCII 字元 2. GBK編碼 GBK實際上是ASCII的中文擴展編碼,其規則是: 1> 如果第一個位元組的大於127(0x7F, 0111 1111,即最高位為0),則表示從這個位元組開始的2個字... ...


1. ASCII碼

1> ASCII碼不包括我們輸入法中的"特殊字元"和"數學字元"等,他們都屬於擴展ASCII 字元

Image


2. GBK編碼

GBK實際上是ASCII的中文擴展編碼,其規則是:

1> 如果第一個位元組的大於127(0x7F, 0111 1111,即最高位為0),則表示從這個位元組開始的2個位元組是表示一個漢字,否則,則是一個英文ASCII碼

2> GBK是相容ASCII的

3> GBK的漢字編碼占用2個位元組

4> 這類編碼方式統稱為做 “DBCS“(Double Byte Charecter Set 雙位元組字元集)

 

3. Unicode編碼

Unicode是為瞭解決ASCII的各類擴展編碼方式不統一的問題(比如GBK和臺灣的漢字編碼就不相容),而制定的採用多位元組統一編碼世界所有字元的編碼方案,所以Unicode能顯示各國的字元編碼

1> Unicode編碼包括UCS-2, UCS-4,分別用2, 4個位元組表示一個字元,通用的是UCS-2

2> 由於多個位元組在記憶體中的儲存設計到字元順序的問題

3> Unicode表示ASCII碼時,是將高位位元組全置為0,所以Unicode和ASCII是不相容的

  Magic Header(by byte) Exmaple("中":0x4E2D)
小尾(LE) FF, FE FF, FE, 2D, 4E
大尾(BE) FE, FF FE, FF, 4E, 2D

 

4. UTF-8

UCS-2表示英文字母會浪費一個位元組,而世界上大部分的資料都是用英文的,所以用Unicode編碼進行文件傳輸和保存的時候就極為浪費帶寬和硬碟, 因此就有了UTF-8, UTF-16的出現來拯救世界

UTF :(UCS Transfer Format)

1> UTF-8:UTF-8是一種變長的編碼方式,可以用1~4個位元組表示一個字元

2> UTF-8的原碼還是Unicode,只是其將Unicode進行了格式化編碼,轉化方式:

     2.1 單位元組的字元(如英文),位元組的第一位設為0,對於英語,UTF-8碼只占用一個位元組,和ASCII碼完全相同

     2.2 需用n個位元組的字元(n>1),第一個位元組的前n位設為1,第n+1位設為0,後面位元組的前兩位都設為10,這n個位元組的其餘空位填充該字元unicode碼(2進位的),高位用0補足。

     如格式化字元:"中"(0x4E2D, 0100 1110 0010 1101)

     (1) "中"占用2個位元組,因為UTF-8需要多的bit來做標記,所以至少需要多餘2個位元組的空間來轉UTF-8,先設n=3

     (2) 3個位元組各自的標記bit如下:

          1 : 1110 0000

          2 : 1000 0000

          3 : 1000 0000

     (3) 我們發現剩下的空的bit位數 = 4 + 6 + 6 = 16 = 2位元組,剛好夠放一個Unicode,依次將"中"(0100 1110 0010 1101)的2進位bit放入

          1 : 1110 0100     0xE4

          2 : 1011 1000     0xB8

          3 : 1010 1101     0xAD

     (4) 雖然Unicode填入UTF-8的模板沒說是大尾還是小尾,而是用我們正常看2進位數的順序填入的,但這個順序其實是一個大尾(0x4E放在前面轉bit)

3> Windows中,會使用BOM來標記編碼順序,UTF-8由於沒有編碼順序,Windows就用BOM = EF BB BF來表示UTF-8編碼,但很多系統和軟體中是不認這個BOM的

4> "®"字元的Unicode編碼是0x00AE,在UTF-8編碼中是採用2個位元組的模板來編碼的:C2 AE = 1100 0010 1010 1110,抽取出來就是0 0010 10 1110 = 000 1010 1110,然後高位補0 = 0000 0000 1010 1110 = 0xAE,也就是說Unicode編碼高位為00的字元,在UTF-8中都可以用2位元組的模板來編碼,可以節省一個位元組


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對於前端人員面試,出現頻率最多也是讓人最頭疼的就是面試官說:“請簡單談一談你對閉包的理解”。對於這一個幾乎快被人問爛的問題,屢屢出現在我們面試或被面試的過程中的原因很簡單--我們一直都在接觸閉包,卻很少去正確地對待它。 因為閉包是因為JS的一些語言特性而形成的,所以在談它之前我們首先要瞭解一下的知識 ...
  • 效果展示:http://hovertree.com/texiao/js/35/數字採用漂亮的糖果皮膚設計效果圖:代碼如下: 轉自:http://hovertree.com/h/bjaf/o0yqj1ly.htm 更多特效: http://www.cnblogs.com/roucheng/p/texi ...
  • 1.執行MR的命令: hadoop jar <jar在linux的路徑> <main方法所在的類的全類名> <參數> 例子: hadoop jar /root/wc1.jar cn.itcast.d3.hadoop.mr.WordCount hdfs://itcast:9000/words /out ...
  • 用Eclipse做一個後臺項目,但是資料庫不想放在本地電腦,於是買了一個騰訊雲伺服器(學生有優惠,挺便宜的),裝上MySQL資料庫,但是測試連接的時候,發現總是連接不是上,但是本地資料庫可以連接,於是上網搜索發現,mysql 資料庫預設的連接只能在本機連接,遠程連接必須授權。 遠程連接許可權配置: 進 ...
  • 1.HDFS shell 1.0查看幫助 hadoop fs -help <cmd> 1.1上傳 hadoop fs -put <linux上文件> <hdfs上的路徑> 1.2查看文件內容 hadoop fs -cat <hdfs上的路徑> 1.3查看文件列表 hadoop fs -ls / 1. ...
  • [1]字元函數 [2]數值運算符 [3]比較運算符 [4]日期時間 [5]信息函數 [6]聚合函數 [7]加密函數 [8]自定義函數 ...
  • [ctrl+q] 打開查詢視窗 [ctrl+/] 註釋sql語句 [ctrl+shift +/] 解除註釋 [ctrl+r] 運行查詢視窗的sql語句 [ctrl+shift+r] 只運行選中的sql語句 [F6] 打開一個mysql命令行視窗 [ctrl+l] 刪除一行 [ctrl+n] 打開一個 ...
  • 一、前言 現在越來越多的公司用git進行版本控制,不過git是預設是開源的,如果私有的話是需要付費的,如果不想付費自己可以搭建一個git伺服器用來版本控制。 二、伺服器端操作 1、安裝git 2、創建一個git用戶 3、創建登錄證書 在git用戶目錄下創建.ssh文件夾併在其下創建文件authori ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...