国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

從ASCII、GBK與Unicode等字符編碼角度搞清楚為什么開發中會出現亂碼問題

開發 前端
在SpringBoot中默認的字符編碼通常是UTF-8,這是Java和SpringBoot推薦的標準字符編碼(特別是在處理Web請求和響應)。因為UTF-8編碼支持廣泛的字符集,包括大多數自然語言,并且可以有效地減少數據傳輸時的空間。?

    在我們日常的開發過程中經常會出現亂碼問題,這種問題往往發生在數據的輸入和輸出過程中。 下面我們從字符編碼的角度來了解為什么不同的字符編碼之間會出現亂碼的問題。

    我們都知道在計算機只存儲和處理的是二進制數據,所有字符(如文字、符號、數字)都需要被編碼為二進制形式,亂碼其實是字符的編碼和解碼二進制數據不匹配導致的問題,也就是當一個字符的編碼方式與解碼方式不一致時,解碼結果會與預期不符,呈現出錯誤的字符。

1、ASCII碼

    眾所周知,計算機是美國人發明的,美國人將他們國家常用的字符如英文字母、數字和標點符號等可見字符,還有一些日常使用(如打印)中涉及到的不可見字符(如回車鍵這樣的控制字符)都存儲到計算機里面。接下來他們按照順序將不可見字符(33個)、可見字符(95個)列出來,于是就形成了如下圖所示的ASCII碼表:

圖片圖片

給0、1、2、a、b.....這樣的字符稱之為ASCII碼字符集;給ASCII碼字符集對應的二進制碼稱之為ASCII碼。

    ASCII碼如果在美國一直使用是沒有問題,但是其他國家學習計算機就會存在問題,因為沒有對應的字符編碼,于是對ACSII碼進行了擴展。

    擴展的方法是將原ASCII碼的第一位0修改成第一位為1,然后從128個字符擴展到255個字符,這樣新增加了128個,給新增加128個字符取名叫做擴展字符集,如下圖所示的擴展圖:

圖片圖片

    通過擴展ASCII碼暫時解決了西方國家的字符編碼問題。隨著計算機不斷的發展和普及,計算機走向了世界各國,就比如我們中國來說,中國的漢字至少有上千個,這個時候256個字符已經不夠用了。

2、GB2312碼

    由于8位表示一個字符已經無法滿足中文字符的實際需求了,所以就設計使用16位表示一個字符,那么中文怎么編碼呢?編碼的步驟如下所示:

(1)設定字符集    

    中文字符比較多,采用分區管理的方式管理中文字符集,共分成94個區,每個區含94個位,共8836個碼位。如下所示的第1區的字符集:

圖片圖片

每個分區的存儲的內容如下表整理:

分區范圍

存儲的內容

01-09

收錄除漢字外的682個字符

10-15

用戶自定義符號區(未編碼)

16-55

收錄3755個一級漢字,按拼音排序

56-87

收錄3008個二級漢字,按部首/筆畫排序

88-94

用戶自定義漢字區(未編碼)

(2)定義漢字的位置

    每個分區的字符如何確定其字符的位置呢?在GB212中使用分區號+字符的行列號來確定字符的位置,如下圖所示的第16分區中的”白“字:

圖片圖片

”白“字使用其分區號(16)+行號(3)+ 列號(7)組成1637

(3)計算實際的存儲位置

    將”白“字的碼位1637分別拆分成16、37后轉成十六進制,然后對這兩個十六進制數再分別與A0相加(加A0的好處是讓計算機區分ASCII碼和GB2312碼),將得到的結果合并就計算出了”白“字的存儲位置,如下圖所示的計算過程:

圖片圖片

通過這種規則的計算,得到”白“字的實際在計算機中存儲位置為0xB0C5。

3、GBK

    由于我們中國的漢字太多了,導致了很多漢字都不在GB2312碼中,為了滿足實際的需要,于是對GB2312碼進行擴充。

    擴充的方法是將之前沒有用上的碼位都使用上,并且不在規定它的低位一定要大于127,可以小于127,但是必須要保證高位大于127,然后規定計算機只要遇到大于127的字節就表示一個漢字的開始。

圖片圖片

    通過這種方式新增了近2萬個字符和漢字,將這些字符集稱為GBK字符集,對應的編碼稱為GBK碼。

3、Unicode

    中國可以實現自己的一套編碼規則,同樣的道理,其他的國家也可以實現自己的一套編碼,這樣就出現了新的問題,世界上這么多的編碼,那么不同國家在進行通信的時候就會出現亂碼的現象。于是ISO的組織提出了一套規范,這樣就出現了Unicode的標準。Unicode是一個標準,它包含了字符集以及對應的編碼規則,目的就是將世界上所有的字符整理到一起并且進行編碼。

3.1、UCS-2字符集

    初期Unicode使用16位的UCS-2字符集,UCS-2字符集將世界上所有用到的字符羅列到一起,按照順序標上對應的位置編碼然后轉成二進制存儲,這樣UCS-2字符集可以表示65536個字符。如下圖所示的UCS-是字符集:

圖片圖片

3.2、UCS-4字符集

    UCS-2字符集還是無法表示世界上所有的語言字符,于是Unicode推出了UCS-4字符集,UCS-4字符集用32位表示一個字符,如下圖所示:

圖片圖片

    UCS-4字符集可以表示近42億個字符,基本可以容納世界上所有的字符了,由于UCS-4字符集占用的空間大,所以它沒有被各國很好的接受。

3.3、UTF-8編碼

    到了互聯網飛速發展的階段,世界各國的交流日益頻繁,不同的編碼之間無法通信,大家便重新思考unicode編碼,于是便推出如下的編碼規則:

圖片圖片

    UTF-32屬于定長編碼,它的每個字符編碼固定占4字節,比如對于英文字母a,UTF-32表示這個字符需要32位,在ASCII的編碼中字符a只需8位就可以表示,那么那如果存儲的內容主要是英文,使用UTF-32占用的存儲空間就是使用ASCII編碼占用的存儲空間的四倍。

    UTF-32編碼會造成嚴重的內存消耗,而UTF-8編碼則不存在這個問題,因為它是一種變長的編碼,對于英文字符UTF8和ASCII編碼是一樣的,只占一個字節,對于非英文的字符,UTF-8會使用2~4個字節來表示(如對于中文一般會使用三個字節來表示)。

    UTF-8的優勢是可以有效的利用存儲空間避免浪費,并且UTF-8向后兼容了ASCII編碼,UTF-8的編碼規則有如下的幾種:

圖片圖片

    1個字節的UTF-8編碼,它的最高位固定為0,剩余的七位用來編碼,這和ASCII編碼是完全一樣的,所以為什么UTF-8可以兼容了ASCII就是這個原因。

    2個字節的UTF-8編碼的首字節的前三位為110,其余字節的開頭兩位為10。

    3個字節的UTF-8編碼的首字節的前四位為1110,其余字節的開頭兩位是10

    4個字節的UTF-8編碼首字節的前五位為11110,其余四節的開頭是10。

    從UTF-8的編碼規則我們可以看到對于2字節到4字節的編碼,它的首字節開頭有幾個連續的1,那就代表著它這個編碼占了幾個字節,那這樣解碼的時候就知道如何對這個二進制數據進行解碼。

    那么一個漢字是如何轉成UTF-8編碼呢?以中文的這個”王“字為例,它在UCS-4中的編碼是0x0000 738B,其UTF-8的編碼過程如下所示:

圖片圖片

    注意的是,如果漢字的二進制無法填滿模板的所有的x空位,則剩余的空位默認都用0來填充,通過這種方式填充完以后就得到了漢字中所對應的UTF-8的編碼。同樣要解碼的話,也只需要逆序執行一次就可以得到對應的漢字。

    至此我們了解了編碼的發展過程,由于每種編碼都有自己的規則,如果不按照它的規則進行解碼就得到一串亂碼。

    在SpringBoot中默認的字符編碼通常是UTF-8,這是Java和SpringBoot推薦的標準字符編碼(特別是在處理Web請求和響應)。因為UTF-8編碼支持廣泛的字符集,包括大多數自然語言,并且可以有效地減少數據傳輸時的空間。

責任編輯:武曉燕 來源: 龍蝦編程
相關推薦

2017-08-15 08:27:48

云備份問題恢復

2020-12-16 11:09:27

JavaScript語言開發

2020-11-16 08:37:16

MariaDB性能優化

2011-06-22 09:37:03

桌面虛擬化存儲

2010-06-04 16:12:39

MYSQL_ASSOC

2020-04-28 17:26:04

監督學習無監督學習機器學習

2020-12-31 07:57:25

JVM操作代碼

2022-06-13 10:07:13

物聯網開發物聯網

2021-09-29 19:17:51

編碼URLEncodeGBK

2018-06-26 14:42:10

StringJava數據

2018-06-20 10:43:58

云端霧端霧計算

2021-01-19 06:43:10

Netty框架網絡技術

2015-10-12 10:01:26

AndroidWindows應用Windows 10

2021-09-01 09:32:40

工具

2010-03-24 11:37:22

Python unic

2021-02-06 12:28:53

低代碼開發者數字化

2022-11-16 14:02:44

2011-05-17 08:58:29

軟件項目經理

2011-03-07 17:44:59

中小企業實施虛擬化

2020-04-11 11:21:22

留存分析模型分析
點贊
收藏

51CTO技術棧公眾號

国产乱子精品一区二区在线观看| 神马久久精品| 精品日韩免费| 久久久久北条麻妃免费看| 日本中文字幕在线2020| 亚洲福利视频三区| 高清av影院| 欧美激情一区二区三区四区| 50度灰在线观看| 老汉av免费一区二区三区| 国产精品久久久久久中文字| 成人污污www网站免费丝瓜| 亚洲精品自拍视频| 国产在线天堂www网在线观看| 日韩欧美激情在线| 久操视频在线播放| 亚洲男男av| 日韩精品免费在线| 亚洲女同av| 中文字幕成人精品久久不卡| 亚洲国产尤物| 欧美成人一二三| 97久久亚洲| 性色av一区二区咪爱| 亚洲aaa级| 国产精品中文字幕久久久| 婷婷中文字幕一区| 国产精品伊人日日| 久久综合狠狠| 特色特色大片在线| 成人精品一区二区三区中文字幕 | 91一区二区在线| 国产免费人做人爱午夜视频| 国产精品久久久久aaaa樱花 | 国内三级在线观看| 欧美日韩激情在线| 18av在线视频| 国产午夜精品视频| 欧美激情影院| 国产精品国色综合久久| 精品在线播放免费| 91欧美视频在线| 一本色道久久加勒比精品| 超级碰碰不卡在线视频| 久久综合久久美利坚合众国| 欧美日韩国产传媒| 欧美一区免费视频| kk眼镜猥琐国模调教系列一区二区| 蜜臀av午夜一区二区三区| 亚洲精品欧美综合四区| 国产福利在线视频| 亚洲视频专区在线| 国产亚洲电影| 日本高清一区| 国产精品视频一二三区 | 日本一区二区乱| 国产美女久久久| 国产自产v一区二区三区c| 我要看一级黄色大片| 4hu四虎永久在线影院成人| 欧美成人性网| 国产欧美在线视频| 岛国av在线一区| 久久久亚洲精华液精华液精华液 | 一级特黄特色的免费大片| 日本大香伊一区二区三区| 成人免费网站观看| 国产精品h在线观看| 免费视频一区二区| 男人天堂免费视频| 亚洲黄色av网站| 欧美午夜18电影| 黄色一级片网址| 欧美日韩精品在线| 99亚洲男女激情在线观看| 国产精品免费区二区三区观看 | 给我免费播放日韩视频| 欧美aaaaa喷水| 亚洲精品综合在线| 一个人www视频在线免费观看| 日本在线观看天堂男亚洲| 麻豆91在线看| 在线看中文字幕| 色综合天天综合网国产成人网| 亚洲一区中文| 两个人hd高清在线观看| 在线亚洲欧美视频| 亚洲精品系列| 白天操夜夜操| 亚洲视频在线免费看| 欧美视频成人| 台湾十八成人网| 中文字幕亚洲激情| 日本中文字幕一区| 丝袜视频国产在线播放| 欧美成人精品一区| 精品一区二区三区免费播放| 免费毛片在线| 国产精品91一区| 国产欧美一二三区| 国产情侣一区二区三区| 无码免费一区二区三区免费播放| 精品久久中文字幕久久av| 久久1电影院| 国产精品自拍片| 日韩av在线免费| 亚洲在线视频| www日韩tube| 91在线精品播放| 一区二区三区小说| 欧美大胆a级| 中文字幕网av| 欧美日韩电影在线观看| 国产99久久久国产精品潘金| 国产精品69xx| 成人高清伦理免费影院在线观看| gogo人体一区| 国产精品福利在线| 久久精品欧美日韩精品| 日韩在线你懂得| 亚洲а∨天堂久久精品9966| av一区二区三区四区| 特黄特黄的视频| 韩国精品一区二区| 九色视频网站在线观看| 国产精品美女免费视频| 亚洲综合自拍偷拍| 日韩高清一级| 成年人视频免费看| 777777777亚洲妇女| 国产精品久久久久婷婷| 超碰精品在线观看| av网站一区| 国产精品女主播| 欧美日韩一区二区免费在线观看 | 秋霞在线观看av| 国产精品吹潮在线观看| 一区二区三区四区五区视频在线观看| 日韩伦理一区二区三区| 少妇免费视频| 99re在线观看视频| 91精品一区二区三区久久久久久| 丝袜亚洲另类欧美综合| 精品91久久| 狠狠热免费视频| 国产成人涩涩涩视频在线观看| 亚洲第一久久影院| 好吊一区二区三区| heyzo高清国产精品| 欧美 日韩 国产精品| 精品精品国产国产自在线| 中文av一区特黄| 欧美在线三区| 黄色在线观看视频网站| 中文字幕视频免费在线观看| av成人综合网| 亚洲a一区二区| 91偷拍一区二区三区精品| 奇米影视888狠狠狠777不卡| 国产综合动作在线观看| 日韩欧美一区二区久久婷婷| 韩国精品一区二区| 欧美特黄不卡| 日韩成人av网| 99久久国产综合精品色伊| 精品一区二区三区中文字幕视频| xxx亚洲日本| 91手机在线播放| 日韩av网站导航| 国产欧美一区二区精品婷婷 | 在线视频你懂得一区二区三区| 久久一区二区三区超碰国产精品| 偷拍视频一区二区三区| xx欧美撒尿嘘撒尿xx| 亚洲www视频| 亚洲免费小视频| 亚洲综合久久av| 麻豆精品一二三| 亚洲黄页网站| 丁香花在线影院| 91福利免费在线| 亚洲国产日韩综合一区| 69视频在线免费观看| 欧美一级高清片| 中文字幕日韩欧美一区二区三区| 国产免费成人| 欧美一级色片| 欧美激情网站| 亚洲成人套图| 欧美一级免费播放| 91视频免费进入| 久久精品视频在线观看| 在线亚洲欧美专区二区| 久久综合999| 久久精品盗摄| 精品国产乱码久久久久久1区2匹| аⅴ资源天堂资源库在线| 亚洲精选av在线| 男人天堂a在线| 国产在线欧美日韩|