UTF8和unicode的轉換@新精讚
文章推薦指數: 80 %
常聽到的unicode, utf8, ascii 又是什麼?utf8和unicode之間的關係及如何轉換?
現在日期2022/10/12星期三
Togglenavigation
現在日期2022/10/12星期三
最新文章[札記]2022.10~12月札記
最新消息開始發表有用的蚊蟑和黴體
數位休閒動漫影音遊戲愉樂網路和服務APACHEMYSQL/Mariadb電腦網路資訊網路協定/設定作業系統WindowsCentosLINUXFreebsdMACIOSunix-like應用其他OS前端程設HTML/CSSJquery/JSFlash/繪圖後端程設PHPopenCV+PythonJAVAPERLC#作者廢言作者碎碎念作者吱吱叫作者喃喃語維修記錄經濟學視野
主題
標準
時間線
更多發現
[無邊框]
精讚新精讚首頁
網路和服務電腦網路資訊
UTF8和unicode的轉換
377
UTF8和unicode的轉換
“常聽到的unicode,utf8,ascii又是什麼?utf8和unicode之間的關係及如何轉換?„
分享此文連結//n.sfs.tw/15670
分享連結UTF8和unicode的轉換@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2022-03-1117:43:21最後編修
2022-03-1109:54:21By張○○
自動目錄
Unicodeunicode簡介unicode的分組unicode表示方法網頁上的表示方法PHP上顯示unicode[4]查詢unicodeUTF8UTF8的編碼方式各字節組擁有的字數UTF8和unicode之間的轉換unicode轉成UTF8UTF8轉成unicode參考資料
常常看到有些文字會用0x12AB或是0x0123AB、U+4AE0、Ӓ這種形式表示,這種寫法到底是什麼意思?和我們常用的文字之間有什麼關係?
常聽到的unicode,utf8,ascii又是什麼?utf8和unicode之間的關係及如何轉換?藉由此文整理並徹底了解。
Unicode
unicode簡介
計算機起源於美國,上個世紀,他們制定了一套字符編碼規則,稱爲ASCII編碼。
ASCII編碼一共定義了128個字符,裡面有英文大小寫數字、標點符號及一些控制用符號,這些字符組成的集合就叫做ASCII字符集。
隨着計算機的普及,在不同的地區和國家又出現了很多字符編碼,比如:大陸的GB2312、港臺的BIG5,日本的ShiftJIS等等。
[1]
但是由於字符編碼不同,文字在不同國家之間經常需要轉換,否則會出現亂碼,網際網路的出現這種情況越來越嚴重需要解決。
於是1990開始就有許多機構致力於統一不同的文字編碼,於是Unicode就出現了,歷經幾十年的發展,成為現在看到的版本。
簡單來說,unicode就是把現有的文字符號等加以編碼收集起來,有點類似一本超大字典,所以unicode也可稱為通用字元集ucs(英語:UniversalCharacterSet,UCS)[3]。
unicode的分組
目前的unicode字符分成17組,從U+0000至U+10FFFF,每組稱為編碼平面(CodePlane),每平面擁有65536個編碼點。
其中U+0000~U+FFFF稱為基本多語言平面(BasicMultilingualPlane,簡記為BMP),也叫做平面0。
平面0包含了世界上多種文字。
其餘劃入16個輔助平面(SupplementaryPlane),編碼點範圍U+10000~U+10FFFF。
其中平面0的中文字群範圍:
4E00-9FBF:CJK統一表意符號(CJKUnifiedIdeographs)包含漢字
總共有40895-19968=20927個漢字
其餘分群請看[6]
目前的Unicode字符分為17組編排,U+0000至U+10FFFF,每組稱為代碼平面(CodePlane),每平面擁有65536(2的16次方)個代碼點。
U+0000~U+FFFF劃入基本多語言平面(BasicMultilingualPlane,簡記為BMP),也叫做平面0。
平面0包含了世界上多種文字。
其餘劃入16個輔助平面(SupplementaryPlane),代碼點範圍U+10000~U+10FFFF。
輔助平面中的文字通常使用不上。
原文網址:https://kknews.cc/code/o5jgy8q.html
目前的Unicode字符分為17組編排,U+0000至U+10FFFF,每組稱為代碼平面(CodePlane),每平面擁有65536(2的16次方)個代碼點。
U+0000~U+FFFF劃入基本多語言平面(BasicMultilingualPlane,簡記為BMP),也叫做平面0。
平面0包含了世界上多種文字。
其餘劃入16個輔助平面(SupplementaryPlane),代碼點範圍U+10000~U+10FFFF。
輔助平面中的文字通常使用不上。
原文網址:https://kknews.cc/code/o5jgy8q.html
目前的Unicode字符分為17組編排,U+0000至U+10FFFF,每組稱為代碼平面(CodePlane),每平面擁有65536(2的16次方)個代碼點。
U+0000~U+FFFF劃入基本多語言平面(BasicMultilingualPlane,簡記為BMP),也叫做平面0。
平面0包含了世界上多種文字。
其餘劃入16個輔助平面(SupplementaryPlane),代碼點範圍U+10000~U+10FFFF。
輔助平面中的文字通常使用不上。
原文網址:https://kknews.cc/code/o5jgy8q.html
unicode表示方法
在表示一個Unicode的字元時,通常會用「U+」或小寫的「u+」然後緊接著多組十六進位的數字來表示這一個字元。
例如
U+50
U+3105
u+0123AB
程式語言有時會用0x代替U+,例如
0x3105
網頁上的表示方法
如果想在網頁上呈現unicode,把'U+'替換成'',把十六進位的編碼換成十進位,最後在字元的結束加上分號即可,例如顯示注音符號的ㄅ,查碼發現編碼是u+3105,
要把3105換成10進位,即12549,那在網頁上打上
ㄅ
就會出來注音符號的ㄅ。
PHP上顯示unicode[4]
print0x3105; //12549
json_decode('"\u3105"'); //ㄅ
查詢unicode
那要怎麼知道文字的unicode編碼?當然如果可以直接打出來的字不必理會他的編碼,但有些字是以現有的輸入法打不出來的,這時就可以使用查表的方法
可以參考以下網站(2022.3):
unicode有分類清單https://jicheng.tw/hanzi/unicode?s=9F9C&e=9F9C&font= ;;(推薦[6])
全字庫https://www.cns11643.gov.tw/searchQ.jsp?ID=0
unicode清單有轉10進位https://www.ifreesite.com/unicode/character.htm
UTF8
unicode是字元集,要實現的話還是得靠編碼系統,其中有名的有utf8,utf16,ucs2,ucs4等等。
根據w3tech[5]的研究,到了2022.3,utf8已占了網頁中全部編碼系統的98%。
其餘編碼雖然仍存在諸多系統中,但使用數量已漸漸示微。
UTF8的編碼方式
UTF-8是一種非固定長度字節編碼方式。
最長可達6個bytes(以下稱為字節)組成一個字,最短只需1個byte。
這樣的好處是他相容於ascII的編碼方式。
以下是UTF-8的編碼原則(2進位)。
1字節0xxxxxxx
2字節110xxxxx10xxxxxx
3字節1110xxxx10xxxxxx10xxxxxx
4字節11110xxx10xxxxxx10xxxxxx10xxxxxx
5字節111110xx10xxxxxx10xxxxxx10xxxxxx10xxxxxx
6字節1111110x10xxxxxx10xxxxxx10xxxxxx10xxxxxx10xxxxxx
舉例如下,粉底代表定義的指定位元:
A=>65=>01000001 <==等同於ASCII
и=>208184=> 1101000010111000
錢=>233140162=>111010011000110010100011
ね=>227129173 =>111000111000000110101101
一隻豬(請看下圖)=>240,147,131,159 =>11110000100100111000001110011111
四個字節的字有些電腦無法正確顯示,請參考上圖。
簡單的判斷方法,第一個字節2進位有幾個1開頭就是幾個字節的UTF8字。
各字節組擁有的字數
1字節0xxxxxxx=>2^7=128個
2字節110xxxxx10xxxxxx=>2^(5+6)=2048
3字節1110xxxx10xxxxxx10xxxxxx=>2^(4+6+6)=65536
4字節11110xxx10xxxxxx10xxxxxx10xxxxxx=>2^(3+6+6+6)=2097152
5字節111110xx10xxxxxx10xxxxxx10xxxxxx10xxxxxx=>67108864
6字節1111110x10xxxxxx10xxxxxx10xxxxxx10xxxxxx10xxxxxx=>2147483648
基本上用3個字節就足以涵蓋67000個字、4個字節就足以涵蓋215萬個字,五個字節以上的字目前沒有。
UTF8和unicode之間的轉換
UTF8是變動字節長,而unicode是固定字節,這兩者之間如何轉換?
unicode轉成UTF8
Unicode的字節編碼對照UTF8的編碼方式
直接用範例作說明,例如中文字的「錢」unicode是U+9322
1.因為是9322,屬於平面0000800~00FFFF這個範圍,也就是三字碼UTF8
2.9322=>9322(16進位)=>1001001100100010(2進位)=>16個位元拆成4,6,6分組
=>1001001100100010
3.將分成的3組代換掉UTF8的xxxx..
111010011000110010100010 =>233 140162 (10進位)
利用PHP來驗證
printchr(233).chr(140).chr(162);
結果
錢
UTF8轉成unicode
由UTF8轉成unicode只要倒過來運算即可。
以剛才的錢字為例:
1.取得UTF8編碼233140162
2.轉成二進位111010011000110010100010
3.把顏色的部分組合=>1001001100100010
4.8個位元一組轉成16進位=>9322
5.U+9322完成
參考資料
[1]https://www.readfog.com/a/1638084002220969984
[2]https://zh.wikipedia.org/wiki/Unicode
[3]https://zh.wikipedia.org/wiki/%E9%80%9A%E7%94%A8%E5%AD%97%E7%AC%A6%E9%9B%86
[4]https://stackoverflow.com/questions/17539412/print-unicode-characters-php
[5]https://w3techs.com/technologies/cross/character_encoding/ranking
[6]https://jicheng.tw/hanzi/unicode?s=9F9C&e=9F9C&font=
END
你可能感興趣的文章
[CentOS8]GCP政府憑證申請及掛載資安的關係開始要求各網站導入ssl,那就申請政府憑證吧
銅網路線路UTP測試名詞解釋一條銅網路線的品質好不好得經過測試,測試也是有學問的
HPSAS硬碟leds燈號說明HPSAS硬碟leds燈號(hpg7/g6系統適用)說明
YAHOO拒絕我的mail:spamhaus'slist有人反應yahoo收不到信,因為該ip被列入spamhaus'slist
台灣2022(民國111年)節慶國定假日ics下載找不到2022年的假日ics檔?沒關係,我自己做一個
[Gigapixels]世界最大的單張倫敦照片-3200億畫素世界最大的單張倫敦照片-3200億畫素,從BT塔上拍攝。
我有話要說
>>
姓名*
EMAIL*
留言內容*
我是人類*
限制:留言最高字數1000字。
限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。
訪客留言
[無留言]
隨機好文
使用Google尋找你的手機這近發現google竟然可以用來找android的手機,而且不需要經過什麼設定或安裝軟體。
談借錢人借錢時手心向上頭向下,人還錢時手心向下頭向上
Linuxshell的date表示法linux下SHELL中的date表示法
詭異的創業思維創業的思維中,有多少銀彈,有多少技術,有多少人脈,有多少時間等等,每個都要考慮進去,以熱忱建立的關係脆弱的像蘇打餅乾一樣..
網頁的標頭(head)搜尋引擎和FB最佳化網頁的標頭(head)搜尋引擎和facebook最佳化
Unicodeunicode簡介unicode的分組unicode表示方法網頁上的表示方法PHP上顯示unicode[4]查詢unicodeUTF8UTF8的編碼方式各字節組擁有的字數UTF8和unicode之間的轉換unicode轉成UTF8UTF8轉成unicode參考資料
到最頂端
到中間
到最底端
延伸文章資訊
- 1UTF-8 - Wikipedia
UTF-8 is a variable-width character encoding used for electronic communication. Defined by the Un...
- 2Unicode 與UTF-8 的關係?. Unicode… | by Roy Kwok - Medium
Unicode (中文稱:萬國碼)給每個字元提供了一個唯一的數位,不論是什麼平臺、不論是什麼程式、不論是什麼語言。 簡而之,Unicode是字符集,將所有的文字,符號等等編碼。
- 3UTF8和unicode的轉換@新精讚
常聽到的unicode, utf8, ascii 又是什麼?utf8和unicode之間的關係及如何轉換?
- 4Convert Unicode to UTF-8
This browser-based utility converts your Unicode text to UTF-8 encoding. UTF stands for Unicode T...
- 5Unicode、UTF-8、UTF-16,終於懂了 - 閱坊
UTF-8 的編碼規則: 對於單字節的符號,字節的第一位設爲 0,後面7 位爲這個符號的Unicode 碼。因此 ...