成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官竟然敢問我URLEncode 及Gbk, Unicode等編碼

開發 前端
unicode 在很長一段時間內無法推廣,直到互聯網的出現,為解決 unicode 如何在網絡上傳輸的問題,于是面向傳輸的眾多 UTF(UCS Transfer Format)標準出現了,顧名思義,UTF-8 就是每次 8 個位傳輸數據,而 UTF-16 就是每次 16 個位。

[[426690]]

URL encode

URL encode 實際上是對 URI 進行 encode的,而不是對 URL。

什么是 URI?

Uniform Resource Identifier (URI,統一資源標志符) ,是用來標識資源的字符串,規定了以下文法:

上圖可見,有效的 URI 至少包含 scheme,: 以及 path(路徑),如經典的觸發操作系統發郵件動作的mailto 格式[1]:

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

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

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

URI包含URLs and URNs

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

簡單說作用就是:

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

Reserved Characters(保留字符)

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

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

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

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

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

實際應用

在下述url 中,需要傳入跳轉 BACK_URL 參數 new_login.com?a=12 時,就需要轉移 ? 跟 =g .

https://third_party_login.com?BACK_URL=new_login.com?a=12 就應該轉換成

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

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

http 協議中 headers 的 content-type 里常見的的 application/x-www-form-urlencoded,指定請求 body 使用 URL encoded。

gbk,Unicode,UTF-8

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

簡單來說:

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

詳細過程:

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

unicode 在很長一段時間內無法推廣,直到互聯網的出現,為解決 unicode 如何在網絡上傳輸的問題,于是面向傳輸的眾多 UTF(UCS Transfer Format)標準出現了,顧名思義,UTF-8 就是每次 8 個位傳輸數據,而 UTF-16 就是每次 16 個位。UTF-8 就是在互聯網上使用最廣的一種 unicode 的實現方式,這是為傳輸而設計的編碼,并使編碼無國界,這樣就可以顯示全世界上所有文化的字符了。UTF-8 最大的一個特點,就是它是一種變長的編碼方式。它可以使用 1~4 個字節表示一個符號,根據不同的符號而變化字節長度,當字符在 ASCII 碼的范圍時,就用一個字節表示,保留了 ASCII 字符一個字節的編碼做為它的一部分,注意的是 unicode 一個中文字符占 2 個字節,而 UTF-8 一個中文字符占 3 個字節)。從 unicode 到 utf-8 并不是直接的對應,而是要過一些算法和規則來轉換。

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 有什么區別?: https://www.zhihu.com/question/23374078/answer/69732605

本文轉載自微信公眾號「山盡寫東西的cache」,可以通過以下二維碼關注。轉載本文請聯系山盡寫東西的cache公眾號。

 

責任編輯:武曉燕 來源: 山盡寫東西的cache
相關推薦

2021-04-14 18:58:01

虛擬機 Java內存

2021-12-02 08:19:06

MVCC面試數據庫

2020-04-16 08:22:11

HTTPS加解密協議

2021-05-20 08:54:16

Go面向對象

2010-08-23 15:06:52

發問

2022-05-24 08:03:28

InnoDBMySQL數據

2021-06-03 08:55:54

分布式事務ACID

2023-09-01 15:27:31

2022-10-17 00:04:30

索引SQL訂單

2020-12-03 07:39:50

HashMap底層數據

2020-08-10 07:58:18

異步編程調用

2021-05-08 07:53:33

面試線程池系統

2021-05-19 08:17:35

秒殺場景高并發

2022-04-01 07:52:42

JavaScript防抖節流

2021-03-11 08:51:00

存儲面試位置

2021-08-28 09:06:11

Dubbo架構服務

2020-05-20 17:35:40

JavaString面試官

2024-07-10 10:08:36

項目多表關聯哈希

2021-02-06 09:21:17

MySQL索引面試

2022-04-10 18:10:24

CURD鏈表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕成人 | 国产欧美一区二区久久性色99 | 爽爽免费视频 | 这里有精品 | 午夜在线免费观看 | 国产欧美日韩精品一区二区三区 | 亚洲欧美在线一区 | 黄在线| 精品国产一区探花在线观看 | 好姑娘影视在线观看高清 | 亚洲国产日韩一区 | 国产一区二区三区四区三区四 | 免费av观看 | 成人在线中文字幕 | 免费一区二区 | 国产亚洲成av人在线观看导航 | 日韩有码一区 | 日韩电影一区二区三区 | 九九成人| 日本黄色的视频 | 精品国产视频 | 成人精品视频在线观看 | 日韩在线中文字幕 | 男女羞羞视频网站 | 亚洲日韩第一页 | 黄色在线免费观看 | 久久婷婷国产麻豆91 | 成人国产精品久久 | 国产精品日本一区二区在线播放 | 国产一区不卡 | 国产精品免费一区二区三区四区 | 中文字幕1区2区 | a国产一区二区免费入口 | 一级片免费视频 | 日本中文字幕一区 | 国产区在线观看 | 精品免费观看 | 九九综合九九 | 极情综合网 | 精品久| 欧美在线综合 |