字元編碼

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...