国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

重新認識unicode和utf8編碼

2019-11-15 02:14:26
字體:
來源:轉載
供稿:網友
重新認識unicode和utf8編碼重新認識unicode和utf8編碼

直到今天,準確的說是剛才,我才知道UTF-8編碼和Unicode編碼是不一樣的,是有區別的他們之間是有一定的聯系的,看看他們的區別:

UTF-8的長度是不一定的,有可能是1、2、3字節Unicode長度一定,2個字節(USC-2)UTF-8可以和Unicode互相轉換
unicode和utf8的關系
Unicode(16進制)UTF-8(二進制)
0000 - 007F0xxxxxxx
0080 - 07FF110xxxxx 10xxxxxx
0800 - FFFF1110xxxx 10xxxxxx 10xxxxxx

上面的表格有2個意思,第一個顯而易見就是說Unicode和UTF-8字符范圍的對應,還有一個可以看出Unicode怎么和UTF-8互相轉換:

先說UTF-8到Unicode的轉換

UTF-8編碼的二進制和上面的3種格式進行匹配,匹配到之后去掉固定位(表格中的非x位置),然后從右到左每8位一組,不夠8位左邊不領,湊夠2個字節16 bits,這16 bits所表示的就是UTF-8對應的Unicode編碼,看看下面幾個例子:上面圖片中的文字編碼格式為UTF-8,可以用WinHex看到其16進制表示

字符=> UTF-8  => UTF-8二進制=> 去掉固定位置湊夠16位的二進制 => 16進制漢 => E6B189 => 11100110 10110001 10001001=> 01101100 01001001 => 6C49字 => E5AD97 => 11100101 10101101 10010111=> 0101101101010111 => 5B57#下面是在Chrome命令行下面運行的結果'/u6C49'"漢"'/u5B57'"字"#到這里的話,從UTF-8轉換到Unicode已經是一件非常容易的事了,看看轉換的偽代碼讀取一個字節,11100110判斷該UTF-8字符的格式,屬于第三種,3個字節繼續讀取2個字節得到 11100101 10101101 10010111按照格式去掉固定位     1011011 01010111不夠16位,左邊補零    01011011 01010111  => 5B57
再看看從Unicode到UTF-8的轉換
5B57獲取5B57所在的Unicode范圍,0800 <= 5B57 <= FFFF,得知5B57的UTF-8有三個字節,形式為1110xxxx 10xxxxxx 10xxxxxx獲取5B57的二進制編碼 101101101010111用上一步驟的二進制編碼從右至左拼接UTF-8編碼 11100101 10101101 10010111 
說說問題

再說說今天這個問題的起因,從前端輸入很多單詞,UTF-8格式每個詞最多30個字節,因此會在前端和后臺分別做驗證,javascript用的是Unicode編碼,后端程序用的是UTF-8編碼,現在的解決辦法是這樣

前端
function utf8_bytes(str){var len = 0, unicode;for(var i = 0; i < str.length; i++){unicode = str.charCodeAt(i);if(unicode < 0x0080) {++len;} else if(unicode < 0x0800) {len += 2;} else if(unicode <= 0xFFFF) {len += 3;}else {throw "characters must be USC-2!!"}}return len;}#例子utf8_bytes('asdasdas')8utf8_bytes('yrt燕睿濤')12
后臺
#對于GBK字符串$len = ceil(strlen(bin2hex(iconv('GBK', 'UTF-8', $Word)))/2);#對于UTF8字符串$len = ceil(strlen(bin2hex($word))/2);

5/21/2015 8:21:53 PM

本文版權歸作者iforever(luluyrt@163.com)所有,未經作者本人同意禁止任何形式的轉載,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北宁市| 景谷| 左权县| 台南市| 东兰县| 区。| 黄龙县| 高阳县| 桓仁| 大关县| 大洼县| 光泽县| 卓尼县| 曲水县| 阿城市| 泗洪县| 龙海市| 宁化县| 安丘市| 大丰市| 耿马| 金寨县| 山西省| 宾川县| 巨野县| 阿拉善右旗| 万全县| 津市市| 文登市| 宜君县| 房山区| 五寨县| 江源县| 镇赉县| 庆阳市| 双牌县| 丹东市| 荆门市| 论坛| 普洱| 阳山县|