深入淺出unicode

2021-08-29 19:50:47 字數 1109 閱讀 6628

大家都知道jvm內部的字元都是unicode表示的,但是什麼是unicode捏? 聽我講你知

早在很多年前國際標準化組織(iso)那些夥計們就感覺ascii那200來個字元是不夠用的

所以就想辦法重新編碼 以容納全世界所有的字元

[b]辦法是:用四個位元組表示乙個字元,這個編碼稱之為iso-10646[/b]

你想啊 2的32次方 那字元老多了 有幾百億個吧 手指頭多的可以數數 :lol:

這四個位元組都有個名字

第乙個位元組:組(group)

第二個位元組:面(plane)

第三個位元組:行(row)

第四個位元組:碼(ceil)

眾兄弟們很爽 :d :d

但是好景不長 iso和unicode很快發現了問題:

初衷是要統一編碼 到頭來還是沒統一啊,這不是白忙活了嗎?

於是經過雙方談判 [color=red]unicode加入到iso-10646的0組0面[/color]叫做基本多語言文字面(bmp)

就是說本來2個位元組的unicode也變成了4個位元組

而實際上用兩個位元組就能夠表示出99%的常用字元,專家們當然發現了這個問題

於是出現了utf-16,utf是ucs/unicode transformation format的縮寫

utf-16是這樣表示的

[color=red]bmp字面的字元編碼保持不變,即unicode的編碼(兩個位元組)

其他字面的字元按照一定規則把32位轉換成兩個16位就ok啦

專家就是專家[/color]

注:按照一定規則的目的是避免跟bmp編碼衝突(個人理解)

[b]但是問題總是乙個接著乙個[/b]

當時的計算機只能處理單位元組資料流,怎麼辦呢? 這當然難不倒專家

於是乎 專家有重新[color=red]按照一定規則[/color]來編碼

乙個位元組的utf-8表示 ascii

二個位元組的utf-8表示 。。。

三個位元組的utf-8表示 。。。

四個位元組的utf-8表示 。。。

[b]一句話:無論是乙個位元組還是4個位元組,通過專家們的規則肯定可以轉換成iso-10646編碼,也就能夠表示全世界的的任何字元了[/b]

參考《深入淺出mysql》

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...

深入淺出ShellExecute

深入淺出shellexecute譯者 徐景周 原作 nishant s q 如何開啟乙個應用程式?shellexecute this m hwnd,open calc.exe sw show 或shellexecute this m hwnd,open notepad.exe c mylog.log...