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

資訊專欄INFORMATION COLUMN

徹底理解編碼

leoperfect / 3265人閱讀

摘要:只有徹底理解編碼,遇到編碼問題才知道問題的根源在哪里,并找到對應的解決辦法。花一點時間去徹底消化并理解他,長遠來看,對以后工作效率的提升是非常值得的。比如中國就制定了等編碼規(guī)范。

只要涉及編程工作,編碼是永遠繞不開的問題。只有徹底理解編碼,遇到編碼問題才知道問題的根源在哪里,并找到對應的解決辦法?;ㄒ稽c時間去徹底消化并理解他,長遠來看,對以后工作效率的提升是非常值得的。下面是我對編碼的一些總結和理解,有不對之處還望指正。

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

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

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

2. 為什么會有多種編碼?

眾所周知,世界上第一臺計算機是在美國誕生的,因此,第一種編碼自然是解決英文和01串的對應關系,這就促生了ASCII編碼的出臺,ASCII編碼表用一個字節(jié)(8位)包含大小字母、數(shù)字、標點符號以及控制字符。

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

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

常用的編碼

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

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

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

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

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

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

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

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

編碼和解碼

編碼:將字符轉為二進制(或unicode)。

解碼:將二進制(或unicode)轉為字符。

不同編碼轉換

首先應該知道,內存統(tǒng)一用Unicode編碼,編碼轉換都統(tǒng)一轉到Unicode,再從Unicode轉為其他編碼。比如ISO-8859-1和UTF-8之間轉換,流程如下:

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

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

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

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

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

打開源文件后,在內存中編譯為.class文件,此時,.class文件是Unicode編碼

將內存中的.class文件存入硬盤,此時,.class文件仍然是Unicode編碼

瀏覽器編碼問題

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

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

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

服務器編碼問題(可參考這里)

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

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

記住: 不管是爬蟲獲取的,瀏覽器收到的還是從本地硬盤讀取的,都是二進制,選擇正確的編碼類型,才能把二進制或者說01序列解析為正確的字符。也就是用何種方式解析01數(shù)字。

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

轉載請注明本文地址:http://systransis.cn/yun/44106.html

相關文章

  • 徹底理解編碼

    摘要:只有徹底理解編碼,遇到編碼問題才知道問題的根源在哪里,并找到對應的解決辦法?;ㄒ稽c時間去徹底消化并理解他,長遠來看,對以后工作效率的提升是非常值得的。比如中國就制定了等編碼規(guī)范。 只要涉及編程工作,編碼是永遠繞不開的問題。只有徹底理解編碼,遇到編碼問題才知道問題的根源在哪里,并找到對應的解決辦法。花一點時間去徹底消化并理解他,長遠來看,對以后工作效率的提升是非常值得的。下面是我對編碼的...

    guyan0319 評論0 收藏0
  • JS魔法堂:徹底理解0.1 + 0.2 === 0.30000000000000004的背后

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

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

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

    yy13818512006 評論0 收藏0
  • 面向對象的 JavaScript

    摘要:是完全的面向對象語言,它們通過類的形式組織函數(shù)和變量,使之不能脫離對象存在。而在基于原型的面向對象方式中,對象則是依靠構造器利用原型構造出來的。 JavaScript 函數(shù)式腳本語言特性以及其看似隨意的編寫風格,導致長期以來人們對這一門語言的誤解,即認為 JavaScript 不是一門面向對象的語言,或者只是部分具備一些面向對象的特征。本文將回歸面向對象本意,從對語言感悟的角度闡述為什...

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

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

    jsliang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<