前端編碼問題彙總

2021-09-06 06:49:22 字數 1685 閱讀 1030

眾所周知,字元的編碼方式有兩種慣例,一種是很古老的對ascii碼

做某種語言子集的擴充套件,比如big5和gb2312,分別是繁體字擴充套件和簡體字擴充套件,兩者互不相容,與之類似的編碼還有iso系列,各個拉丁文的子編碼集合也不相互相容,這種編碼的好處是編碼集合很小,壞處是不能同時使用多種語言,於是就有了另一種編碼慣例:「萬國碼」,全球所有語言做成乙個碼表,即unicode

碼 表,顯然,這種編碼的壞處是碼表太龐大,好處是同時使用多種語言。所謂的utf-7、utf-8之類就是unicode的某種相對高效的實現,不管某個字 符用utf編碼為幾個位元組,他們都屬於同乙個unicode超集。我們常遇到的中文編碼是gb2312、gbk、gb18030和utf-8,不嚴謹的 講,前三者大致相互相容,但都和utf-8不相容。

瀏覽器如何傳送乙個帶有中文的url

整個過程分兩個階段,1,傳送url請求,2,接收資料並呈現

url是一種編碼「方法」,編碼結果依賴於所採用的「碼表」,即漢字的程式碼頁示形式。所以,相同漢字有n多種url編碼結果,「**」的utf8編碼為「%e6%b7%98%e5%ae%9d」,gbk編碼為「%cc%d4%b1%a6」。

注:乙個gb系編碼的html頁面中的form提交,表單中的中文編碼會進行url編碼,但是以gbk格式作轉碼,utf8頁面的form提交,以utf8格式作轉碼。

瀏覽器如何以正確的編碼渲染頁面

http響應的資料起碼有三個地方可以埋藏編碼資訊:

1,http頭中的content-type

2,html頁面中的meta標籤中指定charset

3,頁面正文資料(瀏覽器可以解析正文二進位製碼來判斷編碼)

瀏覽器可以從這三個地方獲得http響應報文的編碼,此外還有兩個因素,瀏覽器預設編碼和作業系統語言型別。

如果三者編碼不一致,瀏覽器會首先讀取http頭中的content-type,若沒有設定編碼,再查詢頁面中meta標籤中的charset設定,如果 還沒有就以瀏覽器預設編碼來顯示,如果預設編碼沒有指定,瀏覽器會通過解析正文內容來判斷編碼。所以,頁面是gbk編碼,即便meta屬性中設定 charset=utf-8,只要content-type中設定為gbk(或者gb2312、gb18030),該頁面就正常顯示,如果這時沒有設定 content-type的編碼,瀏覽器就會以meta中的charset屬性為準,頁面出現亂碼。

js如何把字串編碼成gbk的

問題由來:

js引擎內碼是unicode,所以通過encodeuri(str)進行url編碼的時候均屬utf8編碼

所以在gbk編碼的html中無法用js計算出gbk格式的url編碼,

因此在ajax過程中也就無法用js來模擬gbk格式url編碼的資料提交

"中文"兩字的utf8 url編碼為:%e4%b8%ad%e6%96%87

"中文"兩字的gbk url編碼為:%d6%d0%ce%c4

實現原理:

乙個gbk編碼的html的表單提交時字段的url編碼是和頁面編碼保持一致的(gbk)

所以這裡用模擬表單提交的方法來獲得gbk url編碼

當然,前提必須是頁面編碼也必須為gbk

前端問題彙總

element ui select 詳解 foreach 中的return 不能終止迴圈,更不能終止函式。getid onedeviceid return finalvue 中的setinterval與clearinterval 問題很多,乙個是vue中的interval重寫了interval,se...

python編碼問題彙總

原因 列名用了中文的緣故,設定pandas的引數即可,如下 解決方法 import pandas as pd 這兩個引數的預設設定都是false pd.set option display.unicode.ambiguous as wide true pd.set option display.un...

前端開發問題彙總

1.彈出鍵盤導致絕對定位的元素向上偏移 頁面載入完成後固定父元素的高度 2.background size無效 background size放在background之上了 3.dom.style.width 200 同乙個瀏覽器 有時候生效 有時候無效 content ie edge 4.npm包...