UTF8是使用最廣泛的一種Unicode實現方式,UTF8是一種變長的編碼方式,使用1~4個字節表示一個符號。
UTF8編碼規則
1)單字節字符第一位為0,後面7位為該符號的Unicode編碼。
英語字母的UTF8編碼跟ASCII碼是相同的。
2)n(n>1)個字節的字符,第一個字節的前n位都為1,第n+1位為0,其他字節的前兩位均為10。其他的二進制位就是該字符的Unicode編碼。
0yyy yyyy(小於0x80)
110y yyyy 10yy yyyy
1110 yyyy 10yy yyyy 10yy yyyy
1111 0yyy 10yy yyyy 10yy yyyy 10yy yyyy
如何解析UTF8編碼
UTF8三個字節以內(包括三個字節)的編碼是很容易轉換為UTF16編碼的:
如果是單個字節的UTF8編碼,則直接(char) c即可;
如果是雙字節的UTF8編碼:
110y yyyy
& 0001 1111
10xx xxxx
& 0011 1111
第一個字節移動6位,因為第二個自己有效位數是6位,結果如下
yyy yyxx xxxx
如果是三字節的UTF8編碼:
1110 zzzz
& 0000 1111
10yy yyyy
& 0011 1111
10xx xxxx
&0011 1111
經過移位,結果如下
zzzz yyyy yyxx xxxx
你會發現就是把UTF8中的佔位符號,比如1110,110,10等去掉,其他的位拼在一起就是UTF16.
四字節的UTF8編碼如何轉換為UTF16呢?
完整代碼如下:
相關推薦
'Java是什麼?為什麼要學習Java?Java有哪些特點?'
"在正式開始Java學習之前,先來了解幾個關鍵性問題。那就是什麼是Java,為什麼要學習Java,Java 有哪些特點,Java 有哪些機制,如何來學習 Java 等幾個問題。通過這幾個問題讓大家瞭解 Java 的一些內容,從而展開 Java 的學習。1、java是什麼?J...
'Java中的String為什麼是不可變的?'
"什麼是不可變對象?眾所周知, 在Java中, String類是不可變的。那麼到底什麼是不可變的對象呢? 可以這樣認為:如果一個對象,在它創建完成之後,不能再改變它的狀態,那麼這個對象就是不可變的。不能改變狀態的意思是,不能改變對象內的成員變量,包括基本數據類型的值不能改變...
Java
2019-09-12
'Java中15種鎖的介紹!鎖不鎖不知道,反正Java挺好用的'
"導讀(需要Java相關學習資料,轉發私信小編“學習”)在讀很多併發文章中,會提及各種各樣鎖如公平鎖,樂觀鎖等等,這篇文章介紹各種鎖的分類。介紹的內容如下:1.公平鎖 / 非公平鎖2.可重入鎖 / 不可重入鎖3.獨享鎖 / 共享鎖4.互斥鎖 / 讀寫鎖5.樂觀鎖 / 悲觀鎖...
'高級工程師系列之在Java中如何優雅地判空'
"判空災難NullPointerException作為搬磚黨的一族們,我們對判空一定再熟悉不過了,不要跟我說你很少進行判空,除非你喜歡NullPointerException。不過NullPointerException對於很多猿們來說,也是Exception家族中最親近的...
推薦中...