URL亂碼

URL只能使用英文字母、阿拉伯數字和某些標點符號,不能使用其他文字和符號。這是因爲網絡標準RFC1738做了硬性規定:

在這裏插入圖片描述

一、HTML頁面(response亂碼)

  • 網頁中html的編碼:HTTP header 、meta、user-agent(瀏覽器) 權重越來越低,也就是說http頭會覆蓋meta頭信息。
  • 可以在後臺設置編碼方式:response.setContentType(“text/html; charset=utf-8”);
  • 可以在前端設置編碼方式:
    HTML5簡化成
    css文件頂部:@charset utf-8
  • 若前兩者均沒有,瀏覽器一般有默認編碼。
    Content-Type:是Http的實體首部字段,用於說明請求或返回的消息主體是用何種方式編碼,在request header和response header裏都存在。

瀏覽器解碼html字節流過程:當瀏覽器請求一個靜態html時,服務器會將html頁面的字節流通過網絡傳輸給瀏覽器。瀏覽器再將字節流解碼成相應的html文本字符,從而將html元素渲染出來。

  • 查看頁面編碼方式(也就是瀏覽器查看應該用什麼方式解碼)如下圖:
    1582089687(1)

  • 一個html頁面可以有多種編碼:
    與html頁面編碼相關的還有js(css)文件編碼,默認是採用html的編碼格式去解析js(css)文件。如果js(css)文件與html頁面編碼方式不同,則script標籤有一個charset屬性來指定編碼方式。
    script type=“text/javascript” src=“myscripts.js” charset=“UTF-8”/

二、Web後臺編碼(request亂碼)

html頁面是utf-8格式的, 頁面編碼也指定爲utf-8。

  • POST
    在這裏插入圖片描述
      html提交普通表單時,參數以字節流的方式傳輸到web服務器,web服務器解碼字節流得到參數。tomcat默認採用ISO-8859-1編解碼,所以直接獲取參數是亂碼,以ISO-8859-1編碼回原本的字節流再用utf-8重新解碼就可以得到正確的參數。
      可以在獲取任何參數前調用 request.setCharacterEncoding(“utf-8”) ,即可用utf-8解碼參數,就不用那麼麻煩了。其他語言在原理上也都是相同的。
  • GET方式原理一樣,代碼比較麻煩,一般在Tomcat中配置
    connectionTimeout=“20000”
    redirectPort=“8443”
    URIEncoding=“UTF-8”

三、哪些字符需要轉碼

  • ASCII的控制字符
    ASCII表上的數字0–31分配給了控制字符,用於控制像打印機等一些外圍設備。例如,12代表換頁/新頁功能,指示打印機跳到下一頁的開頭。這些字符是不可打印的,自然需要轉化。
  • 一些非ASCII字符
    比如中文,阿拉伯字符等。
  • 一些保留字符
    比如最常見的連接符“&”。(&是看成普通字符還是參數分隔符)
  • 一些不安全的字符
    比如空格,爲了防止引起歧義,需要轉化成“+”。

字符編碼:ASCII Unicode UTF-8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章