1. 程式人生 > >【Encoding】UTF-8編碼規則

【Encoding】UTF-8編碼規則

UTF-8是一種變長位元組編碼方式。對於某一個字元的UTF-8編碼,如果只有一個位元組則其最高二進位制位為0;如果是多位元組,其第一個位元組從最高位開始,連續的二進位制位值為1的個數決定了其編碼的位數,其餘各位元組均以10開頭。UTF-8最多可用到6個位元組。
如表:

位元組數 格式
1位元組 0xxxxxxx
2位元組 110xxxxx 10xxxxxx
3位元組 1110xxxx 10xxxxxx 10xxxxxx
4位元組 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5位元組 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6位元組 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

因此UTF-8中可以用來表示字元編碼的實際位數最多有31位,即上表中x所表示的位。除去那些控制位(每位元組開頭的10等),這些x表示的位與UNICODE編碼是一一對應的,位高低順序也相同。
實際將UNICODE轉換為UTF-8編碼時應先去除高位0,然後根據所剩編碼的位數決定所需最小的UTF-8編碼位數。
因此那些基本ASCII字符集中的字元(UNICODE相容ASCII)只需要一個位元組的UTF-8編碼(7個二進位制位)便可以表示。
對於上面的問題,程式碼中給出的兩個位元組是:


十六進位制:C0 B1
二進位制:11000000 10110001
提取出對應的UNICODE編碼:
00000 110001
可以看出此編碼並非“標準”的UTF-8編碼,因為其第一個位元組的“有效編碼”全為0,去除高位0後的編碼僅有6位。由前面所述,此字元僅用一個位元組的UTF-8編碼表示就夠了。
Java在把字元還原為UTF-8編碼時,是按照“標準”的方式處理的,因此我們得到的是僅有1個位元組的編碼。

相關推薦

EncodingUTF-8編碼規則

UTF-8是一種變長位元組編碼方式。對於某一個字元的UTF-8編碼,如果只有一個位元組則其最高二進位制位為0;如果是多位元組,其第一個位元組從最高位開始,連續的二進位制位值為1的個數決定了其編碼的位數,

ASPUTF-8編碼的vbscript頁面,除錯資訊的亂碼問題

在被UTF-8編碼的vbscript頁面,在寫程式的過程中,不小心寫錯的話,在頁面的輸出資訊是亂碼的,如下圖所示: 讓人無法得知錯誤的原因。 畢竟在vbscript最初發展的時候,UTF-8編碼還沒有普及,都是預設以伺服器系統的預設編碼來跑網頁,這與現在網頁皆用UTF-8

走過的彎路UTF-8編碼轉GB2312

1.說明:UTF-8和GB2312沒有直接的轉換關係,需要通過查表的方式來裝換,表碼如下連結: http://wenku.baidu.com/link?url=U99KgZDiS3k33Pl7f9UFQo5puGScd462DzzpCOTgl-Hu1I9liubC7gUoo

UTF-8編碼規則解析

在將多個(UTF-8)位元組陣列轉換為字串的時候,可能會發生亂碼,這不是因為編碼問題。 UTF-8是一種變長位元組編碼方式。對於某一個字元的UTF-8編碼,如果只有一個位元組則其最高二進位制位為0;如果是多位元組,其第一個位元組從最高位開始,連續的二進位制位值為1的個數決定

UTF-8編碼規則(轉)

結果,這個問題比我想象的複雜,從午飯後一直看到晚上9點,才算初步搞清楚。 下面就是我的筆記,主要用來整理自己的思路。但是,我儘量試圖寫得通俗易懂,希望能對其他朋友有用。畢竟,字元編碼是計算機技術的基石,想要熟練使用計算機,就必須懂得一點字元編碼的知識。 1. ASCII碼 我們知道,在計算機內部,所

okhttpPost請求設定utf-8編碼(解決漢語請求亂碼問題)

 如果用FormBody 傳送post表單請求,就不能設定編碼格式,contentType方法沒有暴露出來,預設也不是UTF-8,引數是漢字就會亂碼。 所以換一種方式 ,用   RequestBody

刨根究底字符編碼之十一——UTF-8編碼方式與字節序標記

所有 碼元 unix 找到 概念 不可見 執行 大端 位置 UTF-8編碼方式與字節序標記 一、UTF-8編碼方式 1. 接下來將分別介紹Unicode字符集的三種編碼方式:UTF-8、UTF-16、UTF-32。這裏先介紹應用最為廣泛的UTF-8。 為滿足基於AS

ES學習8-聚合1

target style nsa 搜索 名稱 制造商 tab sea bsp 參考資料: https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/_combining_the_two.html 特

php開啟mbstring擴展並設置支持utf-8編碼

tran ret utf-8 enc php asm 不一致 需要 Coding 前一段時間使用一個服務的接口,因為調用接口時使用的參數裏面有中文,調用接口會出現異常問題,後來才明白是編碼不一致的問題。然而,我本地項目開發使用的是utf-8,接口那邊也是需要utf-8的,那

在MyEclipse中設置jsp頁面為默認utf-8編碼

技術 logs utf tor and ren 創建 菜單 下拉框 在MyEclispe中創建Jsp頁面,Jsp頁面的默認編碼是“ISO-8859-1”,如下圖所示: 在這種編碼下編寫中文是沒有辦法保存Jsp頁面的,會出現如下的錯誤提示: 因此可以設置Jsp默認的編碼為

ASCII UTF-8 編碼

代碼 href 語言 ace 最終 方式 eight 中文版 丟了 1. ASCII碼 我們知道,在計算機內部,所有的信息最終都表示為一個二進制的字符串。每一個二進制位(bit)有0和1兩種狀態,因此八個二進制位就可以組合出256種狀態,這被稱為一個字節(byte)。也就是

python聲明編碼的格式

cnblogs 表達 html log 則表達式 pre tar 聲明 nbsp 來自:http://www.xuebuyuan.com/975181.html 編碼聲明必須在第一行或者第二行,且要符合正則表達式 "coding[:=]\s*([-\w.]+)"

Python中的Unicode編碼UTF-8編碼

2個 傳輸 硬盤 中文字符 結合 2.7 客戶端 有一點 來看 下午看廖雪峰的Python2.7教程,看到 字符串和編碼 一節,有一點感受,結合 崔慶才的Python博客 ,把這種感受記錄下來: ASCII碼:是用一個字節(8bit, 0-255)中的127個字母表示大

H.264編碼原理以及I幀B幀P幀

獨立 像素 疊加 提高 oss 解壓 防止 相同 大小 轉自:http://www.cnblogs.com/herenzhiming/articles/5106178.html 前言 ----------------------- H264是新一代的編碼標準,

解決excel打開utf-8編碼csv文件亂碼的bug

導入 對話框 原因 識別 直接 格式 excel exce 編碼 直接用 excel 打開 utf-8 編碼的 csv 文件會導致漢字部分出現亂碼。原因是 excel 以 ansi 格式打開,不會做編碼識別。 打開 utf-8 編碼的 csv 文件的方法: 1) 打開

探路者貢獻分分配規則

情況 每次 基礎 數量 ast 進行 取整 選擇 技術 評分宗旨:準時完成自己的任務得分高。評分核心:日均占比。 1組長將老師的任務盡可能公平的劃分為二十八份細小的任務。解釋:本組7個人,每周5次立會中根據情況選擇4次進行任務完成統計。 2每個同學基礎得分為占比七分之一。每

NetAppDataOntap 8.1 NMSDK

perf clas 查詢 技術 gpo val operation data inf DataOntap 8.1 7-mode版本,需要使用NMSDK 4.1才能使用。 查詢DataOntap 8.1 cifs 延時的命令如下: perf_operation.exe 192

JavaScript進行UTF-8編碼與解碼

str 前端 轉載 clas utf-8 處理 序列 一個 ket JavaScript本身可通過charCodeAt方法得到一個字符的Unicode編碼,並通過fromCharCode方法將Unicode編碼轉換成對應字符。 但charCodeAt方法得到的應該是一個16

javajava基本編碼規範

分享 -m cimage down auto bfd imageview ava bbb 【java】java基本編碼規範

C# MD5 32位加密 UTF-8編碼

spl 十六進制 post ring one 類型 開始 出現問題 int 項目開發過程中需要用到MD5加密,最開始的使用使用加密方法: public static string GetMD5(string str) { byte[] b = System