日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
面試官竟然敢問(wèn)我URLEncode及Gbk,Unicode等編碼

URL encode

URL encode 實(shí)際上是對(duì) URI 進(jìn)行 encode的,而不是對(duì) URL。

創(chuàng)新互聯(lián)建站專注于福田企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站定制開(kāi)發(fā)。福田網(wǎng)站建設(shè)公司,為福田等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

什么是 URI?

Uniform Resource Identifier (URI,統(tǒng)一資源標(biāo)志符) ,是用來(lái)標(biāo)識(shí)資源的字符串,規(guī)定了以下文法:

上圖可見(jiàn),有效的 URI 至少包含 scheme,: 以及 path(路徑),如經(jīng)典的觸發(fā)操作系統(tǒng)發(fā)郵件動(dòng)作的mailto 格式[1]:

 
 
 
 
  1. mailto:John.Doe@cdxwcx.com
  2.   └─┬──┘ └────┬─────────────┘
  3.   scheme     path

其他就是可選的組合路徑了,如 scheme://host path ? query # fragment 就會(huì)我們常見(jiàn)的 url 格式:

 
 
 
 
  1. userinfo       host      port
  2.           ┌──┴───┐ ┌──────┴──────┐ ┌┴┐
  3.   https://john.doe@www.cdxwcx.com:123/forum/questions/?tag=networking&order=newest#top
  4.   └─┬─┘   └───────────┬──────────────┘└───────┬───────┘ └───────────┬─────────────┘ └┬┘
  5.   scheme          authority                  path                 query           fragment

URI包含URLs and URNs

  • URL:Uniform Resource Locator(統(tǒng)一資源定位符):定義了如何找到一個(gè)資源
  • URN: Uniform Resource Name (統(tǒng)一資源名稱):定義了這個(gè)資源的唯一名字

簡(jiǎn)單說(shuō)作用就是:

  • URL:我們目前常用的網(wǎng)站地址,提供了以什么協(xié)議(http,ftp)來(lái)訪問(wèn),地址路徑在哪里(bilibili.com, abc.com)等等。
  • URN:我要獲取的這個(gè)資源有一個(gè)唯一名字,我提供過(guò)去,統(tǒng)一中心會(huì)解析這個(gè) URN,不管這個(gè)資源搬遷到哪里,只要存在就會(huì)返回給你。而 URL 一旦搬遷了,就不是有效地址了,你需要一個(gè)新地址去定位這個(gè)資源。由于歷史原因,URN 幾乎沒(méi)有普及,所以某種程度上給人造成了 URL 跟 URI 好像差不多的樣子。

Reserved Characters(保留字符)

URI 規(guī)定了要保留以下字符作特殊使用:

 
 
 
 
  1. !    *    '    (    )    ;    :    @    &    =    +    $    ,    /    ?    #    [    ]
  2. 來(lái)自 RFC 3986 section 2.2 Reserved Characters (January 2005)

如 ? 用來(lái)帶 url 中的參數(shù),/ 用來(lái)分割 url, & 用來(lái)拼接 query等,保留字符都有自己的作用。

因此需要傳此類字符而不是作特殊字符作用使用時(shí),不能直接放入 url 中,需要編碼,也就是 url encode 做的事情。

encode 很簡(jiǎn)單,把保留字符如 ? 轉(zhuǎn)成 ASCII[2] 的 16 進(jìn)制表示(? 就是 3F),在前面加一個(gè) % 代表這是轉(zhuǎn)碼字符即可,也就是 ? 需要 encode 成 %3F 放在 url 中,所以 url encode 又稱作 Percent-encoding。

實(shí)際應(yīng)用

在下述url 中,需要傳入跳轉(zhuǎn) BACK_URL 參數(shù) new_login.com?a=12 時(shí),就需要轉(zhuǎn)移 ? 跟 =g .

https://third_party_login.com?BACK_URL=new_login.com?a=12 就應(yīng)該轉(zhuǎn)換成

https://third_party_login.com?BACK_URL=new_login.com%3Fa%3D12

這樣子后面的 ? 與 = 就不會(huì)被處理掉,而能夠作為 BACK_URL 這個(gè)參數(shù)的一部分傳給后端。

http 協(xié)議中 headers 的 content-type 里常見(jiàn)的的 application/x-www-form-urlencoded,指定請(qǐng)求 body 使用 URL encoded。

gbk,Unicode,UTF-8

鑒于珠玉在前,我就整理下Unicode 和 UTF-8 有什么區(qū)別?[3]的內(nèi)容 ok 了:

簡(jiǎn)單來(lái)說(shuō):

  • Unicode 是「字符集」
  • UTF-8 是「編碼規(guī)則」
  • 字符集:為每一個(gè)「字符」分配一個(gè)唯一的 ID(學(xué)名為碼位 / 碼點(diǎn) / Code Point)
  • 編碼規(guī)則:將「碼位」轉(zhuǎn)換為字節(jié)序列的規(guī)則(編碼 / 解碼 可以理解為 加密 / 解密 的過(guò)程)

詳細(xì)過(guò)程:

  • 中國(guó)人民通過(guò)對(duì) ASCII 編碼的中文擴(kuò)充改造,產(chǎn)生了 GB2312 編碼,可以表示 6000 多個(gè)常用漢字。
  • 漢字實(shí)在是太多了,包括繁體和各種字符,于是產(chǎn)生了 GBK 編碼,它包括了 GB2312 中的編碼,同時(shí)擴(kuò)充了很多。
  • 中國(guó)是個(gè)多民族國(guó)家,各個(gè)民族幾乎都有自己獨(dú)立的語(yǔ)言系統(tǒng),為了表示那些字符,繼續(xù)把 GBK 編碼擴(kuò)充為 GB18030 編碼。
  • 每個(gè)國(guó)家都像中國(guó)一樣,把自己的語(yǔ)言編碼,于是出現(xiàn)了各種各樣的編碼,如果你不安裝相應(yīng)的編碼,就無(wú)法解釋相應(yīng)編碼想表達(dá)的內(nèi)容。
  • 終于,有個(gè)叫 ISO(國(guó)際標(biāo)誰(shuí)化組織) 的組織看不下去了。他們一起創(chuàng)造了一種編碼 UNICODE(Universal Multiple-Octet Coded Character Set),這種編碼非常大,大到可以容納世界上任何一個(gè)文字和標(biāo)志。所以只要電腦上有 UNICODE 這種編碼系統(tǒng),無(wú)論是全球哪種文字,只需要保存文件的時(shí)候,保存成 UNICODE 編碼就可以被其他電腦正常解釋。
  • unicode 在很長(zhǎng)一段時(shí)間內(nèi)無(wú)法推廣,直到互聯(lián)網(wǎng)的出現(xiàn),為解決 unicode 如何在網(wǎng)絡(luò)上傳輸?shù)膯?wèn)題,于是面向傳輸?shù)谋姸?UTF(UCS Transfer Format)標(biāo)準(zhǔn)出現(xiàn)了。UNICODE 在網(wǎng)絡(luò)傳輸中,出現(xiàn)了兩個(gè)標(biāo)準(zhǔn) UTF-8 和 UTF-16,分別每次傳輸 8 個(gè)位和 16 個(gè)位。UTF-8 顧名思義,是一套以 8 位為一個(gè)編碼單位的可變長(zhǎng)編碼。
  • 于是就會(huì)有人產(chǎn)生疑問(wèn),UTF-8 既然能保存那么多文字、符號(hào),為什么國(guó)內(nèi)還有這么多使用 GBK 等編碼的人?因?yàn)?UTF-8 等編碼體積比較大,占電腦空間比較多,如果面向的使用人群絕大部分都是中國(guó)人,用 GBK 等編碼也可以。

unicode 在很長(zhǎng)一段時(shí)間內(nèi)無(wú)法推廣,直到互聯(lián)網(wǎng)的出現(xiàn),為解決 unicode 如何在網(wǎng)絡(luò)上傳輸?shù)膯?wèn)題,于是面向傳輸?shù)谋姸?UTF(UCS Transfer Format)標(biāo)準(zhǔn)出現(xiàn)了,顧名思義,UTF-8 就是每次 8 個(gè)位傳輸數(shù)據(jù),而 UTF-16 就是每次 16 個(gè)位。UTF-8 就是在互聯(lián)網(wǎng)上使用最廣的一種 unicode 的實(shí)現(xiàn)方式,這是為傳輸而設(shè)計(jì)的編碼,并使編碼無(wú)國(guó)界,這樣就可以顯示全世界上所有文化的字符了。UTF-8 最大的一個(gè)特點(diǎn),就是它是一種變長(zhǎng)的編碼方式。它可以使用 1~4 個(gè)字節(jié)表示一個(gè)符號(hào),根據(jù)不同的符號(hào)而變化字節(jié)長(zhǎng)度,當(dāng)字符在 ASCII 碼的范圍時(shí),就用一個(gè)字節(jié)表示,保留了 ASCII 字符一個(gè)字節(jié)的編碼做為它的一部分,注意的是 unicode 一個(gè)中文字符占 2 個(gè)字節(jié),而 UTF-8 一個(gè)中文字符占 3 個(gè)字節(jié))。從 unicode 到 utf-8 并不是直接的對(duì)應(yīng),而是要過(guò)一些算法和規(guī)則來(lái)轉(zhuǎn)換。

References

[1] mailto 格式: https://www.wikiwand.com/en/Mailto

[2] ASCII: https://www.wikiwand.com/en/American_Standard_Code_for_Information_Interchange

[3] Unicode 和 UTF-8 有什么區(qū)別?: https://www.zhihu.com/question/23374078/answer/69732605

本文轉(zhuǎn)載自微信公眾號(hào)「山盡寫(xiě)東西的cache」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系山盡寫(xiě)東西的cache公眾號(hào)。


當(dāng)前名稱:面試官竟然敢問(wèn)我URLEncode及Gbk,Unicode等編碼
文章源于:http://www.5511xx.com/article/djjgjee.html