成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

徹底理解編碼

guyan0319 / 3474人閱讀

摘要:只有徹底理解編碼,遇到編碼問(wèn)題才知道問(wèn)題的根源在哪里,并找到對(duì)應(yīng)的解決辦法?;ㄒ稽c(diǎn)時(shí)間去徹底消化并理解他,長(zhǎng)遠(yuǎn)來(lái)看,對(duì)以后工作效率的提升是非常值得的。比如中國(guó)就制定了等編碼規(guī)范。

只要涉及編程工作,編碼是永遠(yuǎn)繞不開(kāi)的問(wèn)題。只有徹底理解編碼,遇到編碼問(wèn)題才知道問(wèn)題的根源在哪里,并找到對(duì)應(yīng)的解決辦法?;ㄒ稽c(diǎn)時(shí)間去徹底消化并理解他,長(zhǎng)遠(yuǎn)來(lái)看,對(duì)以后工作效率的提升是非常值得的。下面是我對(duì)編碼的一些總結(jié)和理解,有不對(duì)之處還望指正。

1. 什么是編碼?為什么會(huì)有編碼(可參考這里)?

從根本上來(lái)說(shuō),計(jì)算機(jī)只能處理01,也就是說(shuō)只能處理由0和1組成的一串串?dāng)?shù)字。讓人直接用01數(shù)字給計(jì)算機(jī)下達(dá)指令或傳輸字符顯然是很困難的;但其實(shí),早期計(jì)算機(jī)剛興起時(shí),那時(shí)的程序員就是寫(xiě)好01代碼傳給機(jī)器執(zhí)行的。

人用自然語(yǔ)言溝通,而計(jì)算機(jī)只處理01代碼。為了人與計(jì)算機(jī)更友好的交互,有人想了辦法,將自然語(yǔ)言的每個(gè)字符都用一串01數(shù)字串來(lái)表示,也就是對(duì)每個(gè)字符用01串來(lái)編碼,比如A用0100 0001來(lái)表示,這樣就可以制定一個(gè)字符與01數(shù)字串的對(duì)應(yīng)表,也即編碼表,人只需要輸入自然語(yǔ)言(如:Hello),計(jì)算機(jī)通過(guò)查編碼表就可以轉(zhuǎn)換為01串,這樣機(jī)器就可以理解并處理了。

2. 為什么會(huì)有多種編碼?

眾所周知,世界上第一臺(tái)計(jì)算機(jī)是在美國(guó)誕生的,因此,第一種編碼自然是解決英文和01串的對(duì)應(yīng)關(guān)系,這就促生了ASCII編碼的出臺(tái),ASCII編碼表用一個(gè)字節(jié)(8位)包含大小字母、數(shù)字、標(biāo)點(diǎn)符號(hào)以及控制字符。

隨著計(jì)算機(jī)的普及,世界上開(kāi)始有越來(lái)越多的國(guó)家使用計(jì)算機(jī),然而,每個(gè)國(guó)家都有自己的一套語(yǔ)言,加起來(lái)的字符成千上萬(wàn)。而ASCII最多只能編碼256個(gè)字符,已經(jīng)不能滿足這么多的需求。于是,各國(guó)就制定了自己國(guó)家的編碼表。比如中國(guó)就制定了GB2312、GBK、GB18030等編碼規(guī)范。每個(gè)國(guó)家都有自己的一套編碼,這就導(dǎo)致同一串01數(shù)字可能代表兩個(gè)國(guó)家不同的字符,或者同一個(gè)字符A,在兩個(gè)國(guó)家分別用不同的01數(shù)字串表示。這就導(dǎo)致不同編碼的系統(tǒng)互相傳輸信息時(shí)無(wú)法正確識(shí)別,比如中國(guó)用GBK編碼的字符傳輸給美國(guó)的服務(wù)器,而美國(guó)服務(wù)器只有ASCII編碼表,這就很糟糕。

于是,Unicode編碼出現(xiàn)了。Unicode編碼將世界上各個(gè)國(guó)家所有的字符全部收錄進(jìn)去,每個(gè)字符都用唯一的01字符串表示,這樣的話就做到了全世界所有字符的統(tǒng)一編碼,各個(gè)國(guó)家傳輸信息都用Unicode編碼,根據(jù)Unicode編碼表就可以識(shí)別了。

常用的編碼

ASCII:1個(gè)字節(jié),實(shí)際使用7位,第8位保留,表示英文字符

ISO-8859-1:1個(gè)字節(jié),ASCII的升級(jí)版,在ASCII的基礎(chǔ)上添加了歐洲國(guó)家的字符,不能表示中文,常用于Java服務(wù)的網(wǎng)絡(luò)傳輸

GB2312:2個(gè)字節(jié),收錄6763個(gè)漢字,只能表示簡(jiǎn)體字

GBK:GB2312的升級(jí)版,1個(gè)或2個(gè)字節(jié),收錄21003個(gè)漢字,可以表示簡(jiǎn)體字和繁體字

Unicode(即UCS):原始的Unicode是定長(zhǎng)的4個(gè)字節(jié),比如字母A,用Unicode表示需要4個(gè)字節(jié),比ASCII多了3個(gè)字節(jié),由于這樣做太浪費(fèi)空間,因此經(jīng)過(guò)優(yōu)化制定了變長(zhǎng)表示字符的UTF編碼。

UTF-8:用1-6個(gè)字節(jié)表示所有字符,此處使用變長(zhǎng)字節(jié)表示,優(yōu)先使用短字節(jié)。

UTF-16:用2、4個(gè)字節(jié)表示所有字符,此處使用變長(zhǎng)字節(jié)表示,優(yōu)先使用短字節(jié)。

UTF-32:用4個(gè)字節(jié)表示。

編碼和解碼

編碼:將字符轉(zhuǎn)為二進(jìn)制(或unicode)。

解碼:將二進(jìn)制(或unicode)轉(zhuǎn)為字符。

不同編碼轉(zhuǎn)換

首先應(yīng)該知道,內(nèi)存統(tǒng)一用Unicode編碼,編碼轉(zhuǎn)換都統(tǒng)一轉(zhuǎn)到Unicode,再?gòu)腢nicode轉(zhuǎn)為其他編碼。比如ISO-8859-1和UTF-8之間轉(zhuǎn)換,流程如下:

先知道字符"u"是用ISO-8859-1編碼

獲取字符"u"的二進(jìn)制,java可通過(guò)getByte("ISO-8859-1")正確解析出該字符的二進(jìn)制,也可以用十六進(jìn)制表示,比如AF8U

根據(jù)某種規(guī)則,將ISO-8859-1的AF8U轉(zhuǎn)化Unicode,再轉(zhuǎn)化為UTF-8的4E2D

java編譯的編碼問(wèn)題(可參考這里):

JDK先檢查源文件的編碼類(lèi)型,如果沒(méi)有指定編碼類(lèi)型則用系統(tǒng)的編碼讀取源文件,如果指定了編碼類(lèi)型則用指定的編碼類(lèi)型打開(kāi)源文件。

打開(kāi)源文件后,在內(nèi)存中編譯為.class文件,此時(shí),.class文件是Unicode編碼

將內(nèi)存中的.class文件存入硬盤(pán),此時(shí),.class文件仍然是Unicode編碼

瀏覽器編碼問(wèn)題

看瀏覽器使用的是什么編碼,則顯示的頁(yè)面就是使用什么編碼。

發(fā)送post請(qǐng)求時(shí),看瀏覽器用的什么編碼,則發(fā)送過(guò)去的數(shù)據(jù)就是用什么編碼

一般可以查看headers里ContentType,charset是什么編碼

服務(wù)器編碼問(wèn)題(可參考這里)

服務(wù)器收到請(qǐng)求后,經(jīng)過(guò)正確的編碼規(guī)則解析,服務(wù)器才可以正常識(shí)別

服務(wù)器發(fā)送請(qǐng)求時(shí),經(jīng)過(guò)正確的編碼規(guī)則編碼,瀏覽器才可以正常顯示。瀏覽器也可以自定義編碼去解析

記?。?/strong> 不管是爬蟲(chóng)獲取的,瀏覽器收到的還是從本地硬盤(pán)讀取的,都是二進(jìn)制,選擇正確的編碼類(lèi)型,才能把二進(jìn)制或者說(shuō)01序列解析為正確的字符。也就是用何種方式解析01數(shù)字。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77886.html

相關(guān)文章

  • 徹底理解編碼

    摘要:只有徹底理解編碼,遇到編碼問(wèn)題才知道問(wèn)題的根源在哪里,并找到對(duì)應(yīng)的解決辦法?;ㄒ稽c(diǎn)時(shí)間去徹底消化并理解他,長(zhǎng)遠(yuǎn)來(lái)看,對(duì)以后工作效率的提升是非常值得的。比如中國(guó)就制定了等編碼規(guī)范。 只要涉及編程工作,編碼是永遠(yuǎn)繞不開(kāi)的問(wèn)題。只有徹底理解編碼,遇到編碼問(wèn)題才知道問(wèn)題的根源在哪里,并找到對(duì)應(yīng)的解決辦法?;ㄒ稽c(diǎn)時(shí)間去徹底消化并理解他,長(zhǎng)遠(yuǎn)來(lái)看,對(duì)以后工作效率的提升是非常值得的。下面是我對(duì)編碼的...

    leoperfect 評(píng)論0 收藏0
  • JS魔法堂:徹底理解0.1 + 0.2 === 0.30000000000000004的背后

    摘要:也就是說(shuō)不僅是會(huì)產(chǎn)生這種問(wèn)題,只要是采用的浮點(diǎn)數(shù)編碼方式來(lái)表示浮點(diǎn)數(shù)時(shí),則會(huì)產(chǎn)生這類(lèi)問(wèn)題。到這里我們都理解只要采取的浮點(diǎn)數(shù)編碼的語(yǔ)言均會(huì)出現(xiàn)上述問(wèn)題,只是它們的標(biāo)準(zhǔn)類(lèi)庫(kù)已經(jīng)為我們提供了解決方案而已。 Brief 一天有個(gè)朋友問(wèn)我JS中計(jì)算0.7 * 180怎么會(huì)等于125.99999999998,坑也太多了吧!那時(shí)我猜測(cè)是二進(jìn)制表示數(shù)值時(shí)發(fā)生round-off error所導(dǎo)致,但并不...

    JerryWangSAP 評(píng)論0 收藏0
  • 徹底理解Netty,這一篇文章就夠了

    摘要:如果什么事都沒(méi)得做,它也不會(huì)死循環(huán),它會(huì)將線程休眠起來(lái),直到下一個(gè)事件來(lái)了再繼續(xù)干活,這樣的一個(gè)線程稱(chēng)之為線程。而請(qǐng)求處理邏輯既可以使用單獨(dú)的線程池進(jìn)行處理,也可以跟放在讀寫(xiě)線程一塊處理。 Netty到底是什么 從HTTP說(shuō)起 有了Netty,你可以實(shí)現(xiàn)自己的HTTP服務(wù)器,F(xiàn)TP服務(wù)器,UDP服務(wù)器,RPC服務(wù)器,WebSocket服務(wù)器,Redis的Proxy服務(wù)器,MySQL的P...

    yy13818512006 評(píng)論0 收藏0
  • 面向?qū)ο蟮?JavaScript

    摘要:是完全的面向?qū)ο笳Z(yǔ)言,它們通過(guò)類(lèi)的形式組織函數(shù)和變量,使之不能脫離對(duì)象存在。而在基于原型的面向?qū)ο蠓绞街?,?duì)象則是依靠構(gòu)造器利用原型構(gòu)造出來(lái)的。 JavaScript 函數(shù)式腳本語(yǔ)言特性以及其看似隨意的編寫(xiě)風(fēng)格,導(dǎo)致長(zhǎng)期以來(lái)人們對(duì)這一門(mén)語(yǔ)言的誤解,即認(rèn)為 JavaScript 不是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,或者只是部分具備一些面向?qū)ο蟮奶卣?。本文將回歸面向?qū)ο蟊疽猓瑥膶?duì)語(yǔ)言感悟的角度闡述為什...

    novo 評(píng)論0 收藏0
  • 徹底理解使用JavaScript 將Json數(shù)據(jù)導(dǎo)出CSV文件

    摘要:前言將數(shù)據(jù)報(bào)表導(dǎo)出,是數(shù)據(jù)報(bào)告展示常用的附帶功能。今天我們主要講的是直接通過(guò)前端將數(shù)據(jù)導(dǎo)出的格式的文件。但其實(shí)真正的答案應(yīng)該是把相應(yīng)的數(shù)據(jù)轉(zhuǎn)換成和。若是超過(guò)瀏覽器自身限制的最大長(zhǎng)度,會(huì)導(dǎo)致下載失敗。 前言 將數(shù)據(jù)報(bào)表導(dǎo)出,是web數(shù)據(jù)報(bào)告展示常用的附帶功能。通常這種功能都是用后端開(kāi)發(fā)人員編寫(xiě)的。今天我們主要講的是直接通過(guò)前端js將數(shù)據(jù)導(dǎo)出Excel的CSV格式的文件。 原理 首先在本地...

    jsliang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<