日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

溫馨提示: 本文大約5097字,閱讀完大概需要3-5分鐘,希望您能耐心看完,倘若你對該知識點(diǎn)已經(jīng)比較熟悉,你可以直接跳轉(zhuǎn)到你感興趣的地方,希望閱讀本文能夠?qū)δ兴鶐椭?如果閱讀過程中有什么好的建議、看法,歡迎在文章下方留言或者私信我,您的意見對我非常寶貴,再次感謝你閱讀本文。

一: 編碼江湖之初恩怨

  在編碼的江湖中,"亂碼"算得上我們遇到的最難纏的"敵人"之一,一旦遇上、輕則心情煩躁、重則心態(tài)崩潰。文章開頭,讓我們再次重溫與"亂碼"初見面的名場面。

String str = "亂碼,你好";
byte[] bytes = str.getBytes("GBK");
String string = new String(bytes,"UTF-8");
System.out.println(string);

  運(yùn)行結(jié)果:

全網(wǎng)最全面、全詳細(xì)的編碼、解碼知識

 

  是不是感覺很熟悉,這個是出現(xiàn)亂碼最簡單的例子,雖然在編程時我們肯定不會這樣寫,但是,亂碼出現(xiàn)的原因都是相通的,想要知道為什么?那就繼續(xù)我們的"亂碼"江湖的闖蕩吧。

二: 編碼江湖之"亂碼"家族

  想要從根本上鏟除"亂碼"這個敵人,我們就必須對它的生命歷程有清楚的認(rèn)識,正所謂:"知己知彼,才能百戰(zhàn)不殆"。   

(一)"亂碼"產(chǎn)生的原因:   

在編碼江湖中,我們想要生存下來,首先得懂得這個江湖的規(guī)則,計(jì)算機(jī)就是我們闖蕩的編碼江湖,但是,計(jì)算機(jī)的規(guī)則約定: 它們只能夠讀懂二進(jìn)制數(shù)0和1,我們能夠表達(dá)的確實(shí)對應(yīng)的字符,為了在編碼程序中生存下來,我們需要一種技術(shù)能夠?qū)⑽覀儽磉_(dá)的字符轉(zhuǎn)換成對應(yīng)計(jì)算機(jī)能夠讀懂的二進(jìn)制數(shù)0和1,這種技術(shù)就叫編碼,但是,因?yàn)殛J蕩這者的不同,所表達(dá)的字符就存在差異,所以針對不同的闖蕩地區(qū),存在不同的編碼,如果不是同一個地區(qū)使用了其他地區(qū)的編碼方式進(jìn)行轉(zhuǎn)換,就會出現(xiàn)"亂碼",計(jì)算機(jī)就會看不懂。

三: 江湖規(guī)則之基礎(chǔ)知識

想要在計(jì)算機(jī)世界行走江湖,就必須對這個世界的基礎(chǔ)概念有個清晰的認(rèn)識,下面就講解關(guān)于計(jì)算機(jī)世界的基礎(chǔ)知識講解:

Bit(位)

計(jì)算機(jī)世界的最小存儲單位,也是計(jì)算機(jī)能夠讀懂的,可取的值是0或1,每個值就標(biāo)識1位,如:0000 0001表示的就是8位,轉(zhuǎn)換成我們認(rèn)識的數(shù)值(十進(jìn)制)就是1。

Byte(字節(jié))

計(jì)算機(jī)世界中的一種表示存儲容量的單位,1Byte = 8Bit,即一個字節(jié)可以存儲8位,除了Byte外,計(jì)算機(jī)還有以下常用的存儲容量單位以及他們之間的轉(zhuǎn)換關(guān)系:

1Byte = 8bit
1KB(KByte) = 1024Byte = (1024 * 8)bit
1MB(MByte) = 1024KB =(1024 * 1024)Byte = (1024 * 1024 * 8)bit
1GB = 1024MB =  (1024 * 1024)KB =(1024 * 1024 * 1024)Byte = (1024 * 1024 * 8)bit
1T = 1024GB = (1024 * 1024)MB =  (1024 * 1024 * 1024)KB =(1024 * 1024 * 1024 * 1024)Byte = (1024 * 1024 * 1024 * 8)bit

字符

字符也就是我們在計(jì)算機(jī)表達(dá)的"語言",常見的包括:數(shù)值、字母、文字和符號,如:1、a、A、試、$...都表示的是一個字符,在計(jì)算機(jī)世界中,不同的字符可能需要不同的存儲容量進(jìn)行存儲。

字符集

集:表示集合,字符集則表示多個字符的集合,每個字符集可以包括不同的字符,常見的字符集如下:

ASCII字符集
GB2312字符集
Unicode字符集

字符編碼

定義: 將字符集中的字符編碼(映射)成集合中的某一個對象如:比特模式、自然數(shù)序列、電脈沖等,以方便字符在計(jì)算機(jī)中存儲和在計(jì)算機(jī)網(wǎng)絡(luò)中傳遞

字符集與字符編碼的區(qū)別

字符集表示:多個字符的集合,字符編碼則是:將字符集中的字符映射為特定的字節(jié)或者字節(jié)序列,它表示的是一種規(guī)則。通常特定的字符集采用特定的編碼方式(即一種字符集對應(yīng)一種字符編碼,如: ASCII、ISO-8859-1、GB2312、GBK都是表示了字符集又表示了對應(yīng)的字符編碼,但Unicode字符集是特例,它對應(yīng)的字符編碼有:UTF-8、UTF-16、UTF-32)

查看電腦默認(rèn)的字符編碼

1、打開控制臺(win+R),輸入cmd回車
2、右鍵菜單欄選擇屬性
3、當(dāng)前代碼頁就是對應(yīng)的字符集編碼
全網(wǎng)最全面、全詳細(xì)的編碼、解碼知識

 


全網(wǎng)最全面、全詳細(xì)的編碼、解碼知識

 


全網(wǎng)最全面、全詳細(xì)的編碼、解碼知識

 

編碼和解碼的由來

  計(jì)算機(jī)的世界中,它只能懂得0和1(即二進(jìn)制),但是,我們交流的時候是通過字符進(jìn)行交流,所以,如果想要計(jì)算機(jī)了解我們想表達(dá)的東西,以及我們想了解計(jì)算機(jī)想表達(dá)的東西,就需要在字符和0與1之間進(jìn)行轉(zhuǎn)換,也就是: 編碼和解碼

編碼和解碼

 就編碼和解碼而言,針對的是我們(即在計(jì)算機(jī)中闖蕩的人),這樣就不會混淆這兩個概念。

 編碼: 將字符按照對應(yīng)的編碼類型轉(zhuǎn)換成計(jì)算機(jī)能夠識別的0或者1(類似于生活中的:將中文翻譯成英文的翻譯官)

 解碼: 將0和1根據(jù)對應(yīng)的解碼類型轉(zhuǎn)換成我們能夠讀懂的字符(類似于生活中的: 將英文翻譯成中文的翻譯官)

常見的字符集

  ASCII、GB2312、Unicode、GBK等

(一)ASCII字符集和ASCII編碼

ASCII字符集: 全稱《美國信息交換標(biāo)準(zhǔn)代碼》,主要用于顯示現(xiàn)代英語和其它西歐語言,主要包括:可顯示字符(英文字母、阿拉伯?dāng)?shù)值、標(biāo)點(diǎn)符號)、以及控制字符(回車、換行、退格等特殊字符)。

ASCII編碼: 美國定制的交換標(biāo)準(zhǔn),目的是將ASCII字符集包含的字符轉(zhuǎn)換成計(jì)算機(jī)能夠識別的二進(jìn)制(0和1),它是最通用的信息交換標(biāo)準(zhǔn),到目前為止總共定義了128個字符。 

ASCII編碼缺點(diǎn): 只能顯示26個基本拉丁字母、阿拉伯?dāng)?shù)目字和英式標(biāo)點(diǎn)符號,因此只能用于顯示現(xiàn)代美國英語(而且在處理英語當(dāng)中的外來詞如naïve、café、élite等等時,所有重音符號都不得不去掉,即使這樣做會違反拼寫規(guī)則),而且對其他的語言支持力度也不大,所以現(xiàn)在蘋果也使用Unicode替換ASCII。

(二)GBXXXX字符集

 (1) GB2312字符集:

  • 全稱:《信息交換用漢字編碼字符集》,剛開始ASCII字符集只包含了阿拉伯?dāng)?shù)字、字母和一些特殊符號,這個編碼只適用于美國和西方的一些國家,而不適用于使用漢字的國家,為了使用漢字的國家也能夠和計(jì)算機(jī)進(jìn)行溝通,中國國家標(biāo)準(zhǔn)總局發(fā)布了標(biāo)準(zhǔn)號為:GB2312的編碼格式,它適用于漢字處理、漢字通信等系統(tǒng)之間的信息交換,除了中國大陸使用外,新加坡等地也采用此編碼。
  • GB2312字符集共收錄了6763個簡體漢字,它的收錄包括了拉丁字母、日文平假名等在內(nèi)的682個全角字符,GB2312編碼可以將GB2312字符集包含的字符轉(zhuǎn)換成計(jì)算機(jī)能夠識別的二進(jìn)制0和1。

(2)GBK字符集

  • 全稱:《漢字內(nèi)碼擴(kuò)展規(guī)范》,因?yàn)镚B2312字符集編碼只支持簡體漢字和一些特殊符號,繁體字和一個特殊簡體字都沒有收錄其中,所以微軟針對GB2312做了拓展,在GBK字符集中收錄了繁體字,并最早在Window95簡體中文版使用。
  • GBK拓展了GB2312字符集,共收錄了兩萬多個文字,GBK編碼可以將GBK字符集收錄的字符轉(zhuǎn)換成計(jì)算機(jī)能夠識別的二進(jìn)制0和1。

(3)GB18030字符集

  • 全稱: 國家標(biāo)準(zhǔn)GB 18030-2005《信息技術(shù) 中文編碼字符集》,因?yàn)镚BK是由微軟首先制定的,并不屬于國家標(biāo)準(zhǔn),所以國家為了兼容GBK字符集指定了GB18030字符集,它是中華人民共和國現(xiàn)時最新的內(nèi)碼字集,除了兼容GBK字符集外,還支持GB 13000及Unicode字符集的全部統(tǒng)一漢字。
  • GB 18030字符集共收錄漢字七萬多個,并且存儲方式采用的是可變長字節(jié)編碼,每個字可以由1個、2個或4個字節(jié)組成。
  •  

(二)Unicode字符集

  • Unicode字符集的出現(xiàn): 當(dāng)計(jì)算機(jī)出現(xiàn)在全球各地時,為了與計(jì)算機(jī)進(jìn)行交流,制定了各種各樣的標(biāo)準(zhǔn)如GB232/GBK/GB18030/BIG5的編碼方案,如果只在符合對應(yīng)標(biāo)準(zhǔn)的地區(qū)使用則完全沒有問題,但是如果通過網(wǎng)絡(luò)與其他的地區(qū)進(jìn)行交流時,因?yàn)楦鞯氐木幋a的標(biāo)準(zhǔn)都不一樣,就會在轉(zhuǎn)換中出現(xiàn)"亂碼"現(xiàn)象,為了解決這個問題,Unicode字符集應(yīng)運(yùn)而生。
  • Unicode也稱為: 統(tǒng)一碼/萬國碼/單一碼,它是業(yè)界的一種標(biāo)準(zhǔn),通過它計(jì)算機(jī)可以實(shí)現(xiàn)世界上不同地區(qū)數(shù)十種文字的顯示,2005年Unicode就已經(jīng)收錄了超過十萬個字符,現(xiàn)在由Unicode組織進(jìn)行管理運(yùn)作。
  • Unicode編碼系統(tǒng)為表達(dá)任意語言的任意字符而設(shè)計(jì),它為每種語言中的每個字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語言、跨平臺進(jìn)行文本轉(zhuǎn)換、處理的要求。
  • Unicode編碼標(biāo)準(zhǔn)現(xiàn)在有三種具體實(shí)現(xiàn),分別是:UTF-8、UTF-16、UTF-32。

(1) UTF-8字符編碼:

  • 它是實(shí)現(xiàn)了Unicode編碼方案的一種可變長字符編碼(定長碼),也是一種前綴碼。
  • 它可以用來表示Unicode標(biāo)準(zhǔn)中的任何字符,且其編碼中的第一個字節(jié)仍與ASCII兼容,這使得原來處理ASCII字符的軟件無須或只須做少部份修改,即可繼續(xù)使用。
  • UTF-8已經(jīng)逐漸成為電子郵件、網(wǎng)頁及其他存儲或傳送文字的應(yīng)用中,優(yōu)先采用的編碼。
  • 互聯(lián)網(wǎng)工程工作小組(IETF)要求所有互聯(lián)網(wǎng)協(xié)議都必須支持UTF-8編碼。
  • UTF-8編碼使用一至四個字節(jié)為每個字符編碼(其中ASCII字符集中的128個字符只占1字節(jié),還有附加符文的拉丁文、希臘文等需要2個字節(jié),其他常用的文字占用3個字節(jié),還有極少數(shù)的字符占用4個字節(jié))。

(2) UTF-16字符編碼:

  • 它是實(shí)現(xiàn)了Unicode編碼方案的一種可變長字符編碼(定長碼)
  • 因?yàn)閁nicode字符集中收錄了很多字符,但是常用的一般不會超過65535個以外的字符,所以出現(xiàn)了UTF-16(2字節(jié)=16位)。
  • UTF-16優(yōu)點(diǎn): 它在空間效率上比UTF-32高兩倍,因?yàn)槊總€字符只需要2個字節(jié)來存儲(除去65535范圍以外的),而不是UTF-32中的4個字節(jié)。
  • UTF-16缺點(diǎn): 不兼容ASCII。

(3) UTF-32字符編碼:

  • 它是實(shí)現(xiàn)了Unicode方案的一種定長字符編碼。
  • 它使用4個字節(jié)的數(shù)字來表示每個字母、符號,或者表意文字(ideograph)。
  • 優(yōu)缺點(diǎn): 使用4個字節(jié)存儲每個字符,效率高,處理速度快(因?yàn)椴挥糜?jì)算需要幾個字節(jié)進(jìn)行存儲),但是浪費(fèi)空間。

四:舉例說明編碼與解碼的過程

通過上面的基礎(chǔ)規(guī)則學(xué)習(xí),我們已經(jīng)對字符集、編碼、解碼等基礎(chǔ)知識有了基本的認(rèn)識?,F(xiàn)在我們就通過圖形化來舉一個例子更加形象理解的這些知識(以:ASCII字符集為準(zhǔn),用我們編程入門的最常見的字符串:hello world為例子)

編碼: 在屏幕輸入文字 -> 根據(jù)指定編碼類型 -> 將輸入的文字編碼成計(jì)算機(jī)能夠識別的二進(jìn)制數(shù) -> 計(jì)算機(jī)存儲編輯成的二進(jìn)制數(shù)值

全網(wǎng)最全面、全詳細(xì)的編碼、解碼知識

 

解碼: 計(jì)算機(jī)讀取存儲的二進(jìn)制數(shù)值 -> 根據(jù)指定的解碼類型解碼 -> 將二進(jìn)制數(shù)值解碼成字符集中表達(dá)的字符 -> 在屏幕顯示

全網(wǎng)最全面、全詳細(xì)的編碼、解碼知識

 

五:亂碼出現(xiàn)的原因

通過上面的例子,我們能夠更加清楚編碼和解碼的過程。同時,也看出了亂碼出現(xiàn)的原因:

  • 編碼過程和解碼過程使用的編碼方式不一致
  • 編碼/解碼對應(yīng)的字符集不存在對應(yīng)的字符

六:解決亂碼

 知道出現(xiàn)亂碼的兩個原因,要解決亂碼就要同時滿足以下兩個條件:  

1. 編碼過程和解碼過程使用同一種編碼方式  

2. 使用支持需要編碼解碼的字符串對應(yīng)的字符集

全網(wǎng)最全面、全詳細(xì)的編碼、解碼知識

 

七:經(jīng)常遇到的亂碼場景與解決

一:IDEA工具出現(xiàn)亂碼

  File -> setting -> 輸入File encoding -> 設(shè)置成對應(yīng)的字符集

全網(wǎng)最全面、全詳細(xì)的編碼、解碼知識

 

二:MySQL數(shù)據(jù)庫亂碼和編碼設(shè)置

  通過控制臺登錄到mysql后:

  • 查詢當(dāng)前默認(rèn)的數(shù)據(jù)庫編碼方式:
show variables like 'character_set%'
全網(wǎng)最全面、全詳細(xì)的編碼、解碼知識

 

  • 設(shè)置數(shù)據(jù)庫編碼方式
//當(dāng)前會話,退出控制臺后又恢復(fù)回原來默認(rèn)的編碼方式
set character_set_server=utf8;
set character_set_database=utf8;

//全集范圍,無論是否退出控制臺,以后都是使用這個編碼方式
set global character_set_database=utf8;
set global character_set_server=utf8;

八:參考和感謝

  1、w3c網(wǎng)站-字符集和字符編碼(Charset & Encoding)   

2、亂碼的產(chǎn)生和解決

九:總結(jié)

  相信看到這里,你對亂碼的會有了更深的認(rèn)識,學(xué)習(xí)一個知識,只有知道這個知識的原理,才不會感覺一知半解。

  感謝你閱讀本文,如果你覺得文章哪里存在錯誤,歡迎私信或者在下方留言指出。如果你覺得本文對你有一些幫助,可以給我一個點(diǎn)贊和關(guān)注,讓我有更多動力給大家?guī)砀嗟奈恼?謝謝。

關(guān)注公眾號【是秘密呀j(luò)oy】架構(gòu)師視頻、技術(shù)文章、面試資料、IDEA工具免費(fèi)分享,不定時抽獎,只等你來!

分享到:
標(biāo)簽:解碼 編碼 知識
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定