經常有人談起……我如何把gb或unicode字串轉化成utf8字串?這類的問題
這裡按照自己的理解簡要說明一下
unicode是字元編碼的乙個標準,這個和gb2312或者bg5等是對應的,但是unicode又有些比較高階的特殊性,unicode的編碼是固定的,但是表示這個編碼的形式是多種多樣的,比如乙個字元的unicode編碼是0xabcd,可以有各種形式來表示這個0xabcd,而通常所說的"unicode字串"是指unicode編碼的雙位元組表示法,比如編碼0xabcd就會表示成0xabcd,編碼0x31就表示成雙位元組的0x0031,而utf-8,utf-16是指其他形式的表示法,比如說utf8,見下面的對應表:
* u-00000000 – u-0000007f: 0******x
* u-00000080 – u-000007ff: 110***xx 10******
* u-00000800 – u-0000ffff: 1110***x 10****** 10******
* u-00010000 – u-001fffff: 11110*** 10****** 10****** 10******
* u-00200000 – u-03ffffff: 111110xx 10****** 10****** 10****** 10******
* u-04000000 – u-7fffffff: 1111110x 10****** 10****** 10****** 10****** 10******
就是說在0x00-0x7f段之間的unicode字元,表示成他的本身,比如0x31(字元1)用utf-8的形式儲存成0x31,占用乙個位元組。
0x80-0x7ff段之間的字元(二進位制大於等於8位小於等於11位之內的字元)用兩個位元組表示,這兩個位元組的第乙個位元組的前三位為標誌位(110),第二個位元組的前兩位(10)為標誌位,剩下還有11位來表示這個11位以下的unicode字元的編碼
其他依此類推
這樣的話,使用utf-8編碼,可以使unicode編碼的大多數為英文本元(<0x7f)的字串占用的空間最少,但是使雙位元組的unicode字元(比如中文)表示來需要三個位元組,比起純粹的雙位元組表示的unicode字串來說,各有利弊吧
unicode和utf8的關係
很久以前儲存的,別人寫的但是很明了 很久很久以前,有一群人,他們決定用8個可以開合的電晶體來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,於是他們把這稱為 位元組 再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。他們看到...
Unicode和utf 8的區別
很久以前儲存的,別人寫的但是很明了 很久很久以前,有一群人,他們決定用8個可以開合的電晶體來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,於是他們把這稱為 位元組 再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。他們看到...
unicode和utf8編碼詳解
大家都知道計算機只能處理數字,所以在計算機中其他字元都需要先轉換為數字0和1才能處理。每8個bit作為乙個位元組,乙個位元位表示乙個乙個字元,乙個位元組就能表示255個字元。而乙個位元組足以表示所有的美國字元,所以美國人編寫了自己的ascii編碼,作為自己的統一編碼。但是漢字不止255個,所以中國用...