談?wù)刾hp中的unicode和utf8編碼_第1頁(yè)
談?wù)刾hp中的unicode和utf8編碼_第2頁(yè)
談?wù)刾hp中的unicode和utf8編碼_第3頁(yè)
談?wù)刾hp中的unicode和utf8編碼_第4頁(yè)
談?wù)刾hp中的unicode和utf8編碼_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——談?wù)刾hp中的unicode和utf8編碼談?wù)刾hp中的unicode和utf8編碼

本文給大家深入議論了unicode和utf8這兩種編碼的關(guān)系,理解好了會(huì)察覺(jué)網(wǎng)上一些舊的東西,是嚴(yán)重多余兼過(guò)期的,由于從utf-8流行開頭到現(xiàn)在,早已經(jīng)由原來(lái)六字節(jié)可變編碼到實(shí)際完全居于unicodeUCS-2的穩(wěn)定階段。

重新熟悉unicode和utf8編碼

直到今天,切實(shí)的說(shuō)是方才,我才知道UTF-8編碼和Unicode編碼是不一樣的,是有識(shí)別的囧

他們之間是有確定的聯(lián)系的,看看他們的識(shí)別:

UTF-8的長(zhǎng)度是不確定的,有可能是1、2、3字節(jié)

Unicode長(zhǎng)度確定,2個(gè)字節(jié)(USC-2)

UTF-8可以和Unicode彼此轉(zhuǎn)換

unicode和utf8的關(guān)系

Unicode16進(jìn)制

UTF-8二進(jìn)制

0000-007F0xxxxxxx

0080-07FF110xxxxx10xxxxxx

0800-FFFF1110xxxx10xxxxxx10xxxxxx

上面的表格有2個(gè)意思,第一個(gè)顯而易見(jiàn)就是說(shuō)Unicode和UTF-8字符范圍的對(duì)應(yīng),還有一個(gè)可以看出Unicode怎么和UTF-8彼此轉(zhuǎn)換:

先說(shuō)UTF-8到Unicode的轉(zhuǎn)換

UTF-8編碼的二進(jìn)制和上面的3種格式舉行匹配,匹配到之后去掉固定位(表格中的非x位置),然后從右到左每8位一組,不夠8位左邊不領(lǐng),湊夠2個(gè)字節(jié)16bits,這16bits所表示的就是UTF-8對(duì)應(yīng)的Unicode編碼,看看下面幾個(gè)例子:

上面圖片中的文字編碼格式為UTF-8,可以用WinHex看到其16進(jìn)制表示

復(fù)制代碼代碼如下:

字符=UTF-8=UTF-8二進(jìn)制=去掉固定位置湊夠16位的二進(jìn)制=16進(jìn)制

漢=E6B189=111001101011000110001001=0110110001001001=6C49

字=E5AD97=111001011010110110010111=0101101101010111=5B57

#下面是在chrome命令行下面運(yùn)行的結(jié)果

\u6C49

\u5B57

#到這里的'話,從UTF-8轉(zhuǎn)換到Unicode已經(jīng)是一件分外輕易的事了,看看轉(zhuǎn)換的偽代碼

讀取一個(gè)字節(jié),11100110

判斷該UTF-8字符的格式,屬于第三種,3個(gè)字節(jié)

持續(xù)讀取2個(gè)字節(jié)得到111001011010110110010111

按照格式去掉固定位101101101010111

不夠16位,左邊補(bǔ)零0101101101010111=5B57

再看看從Unicode到UTF-8的轉(zhuǎn)換

復(fù)制代碼代碼如下:

5B57

獲取5B57所在的Unicode范圍,0800=5B57=FFFF,得知5B57的UTF-8有三個(gè)字節(jié),形式為1110xxxx10xxxxxx10xxxxxx

獲取5B57的二進(jìn)制編碼101101101010111

用上一步驟的二進(jìn)制編碼從右至左拼接UTF-8編碼111001011010110110010111

說(shuō)說(shuō)問(wèn)題

再說(shuō)說(shuō)今天這個(gè)問(wèn)題的起因,從前端輸入好多單詞,UTF-8格式每個(gè)詞最多30個(gè)字節(jié),因此會(huì)在前端和后臺(tái)分別做驗(yàn)證,javascript用的是Unicode編碼,后端程序用的是UTF-8編碼,現(xiàn)在的解決手段是這樣

前端

?

1

2

3

4

談?wù)刾hp中的unicode和utf8編碼

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

functionutf8_bytesstr

varlen=0,unicode;

forvari=0;istr.length;i++

unicode=str.charCodeAti;

ifunicode0x0080

++len;

elseifunicode0x0800

len+=2;

elseifunicode=0xFFFF

len+=3;

else

throwcharactersmustbeUSC-2!!

returnlen;

#例子

utf8_bytesasdasdas

8

utf8_bytesyrt燕睿濤

12

后臺(tái)

?

1

2

3

4

#對(duì)于GBK字符串

$len=ceils

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論