<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        造成網(wǎng)頁亂碼的根本性原因是什么

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 15:28:27
        文檔

        造成網(wǎng)頁亂碼的根本性原因是什么

        造成網(wǎng)頁亂碼的根本性原因是什么:先看段代碼:<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>網(wǎng)頁編碼</title&g
        推薦度:
        導(dǎo)讀造成網(wǎng)頁亂碼的根本性原因是什么:先看段代碼:<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>網(wǎng)頁編碼</title&g
        先看段代碼:

        <!DOCTYPE HTML>
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>網(wǎng)頁編碼</title>
        </head>
        <body>
        </body>
        </html>

        HTML代碼中的<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 指定了網(wǎng)頁的編碼為utf-8。
        網(wǎng)頁編碼涉及的知識(shí)點(diǎn)比較多,總的說來它也是一個(gè)歷史遺留問題。
        第一臺(tái)計(jì)算機(jī)(ENIAC)于1946年2月誕生于美國,當(dāng)時(shí)美國只考慮自己使用,并在計(jì)算機(jī)誕生后的幾年里制定了一套ASCII碼標(biāo)準(zhǔn)(American Standard Code for Information Interchange,美國信息交換標(biāo)準(zhǔn)代碼),它是基于拉丁字母的一套電腦編碼系統(tǒng),主要用于顯示現(xiàn)代英語和其他西歐語言。
        ASCII碼使用8位二進(jìn)制數(shù)組合來表示256種可能的字符(2的8次方=256),包含了大小寫字母,數(shù)字0到9,標(biāo)點(diǎn)符號(hào),以及在美式英語中使用的特殊控制字符。一個(gè)字符占1個(gè)字節(jié)。ASCII碼表部分編碼如下:

        HTML的轉(zhuǎn)義符(字符實(shí)體),比如符號(hào)“<”的轉(zhuǎn)義符為“<”或“<”,其中的數(shù)字編號(hào)“60”即是ASCII碼表的第60序號(hào)。類似的,大寫字母“K”也可以轉(zhuǎn)義為“K”。
        我們使用轉(zhuǎn)義符做個(gè)試驗(yàn):

        美國制定ASCII碼的意思是:ASCII碼可以滿足在計(jì)算機(jī)領(lǐng)域所有字符和表示上的需要。不過這只是美國自己的意思,畢竟所有的英文單詞都可以拆分來自26個(gè)英文字母,ASCII碼表能表達(dá)256個(gè)字符,確實(shí)足夠美國使用。
        后來世界各地也都開始使用計(jì)算機(jī),很多國家的語言文字并不是英文,這些國家的文字都沒被包含在ASCII碼表里。以我們中國為例,漢字近10萬個(gè),根本無法排進(jìn)ASCII碼表。于是我們國家對(duì)ASCII碼表進(jìn)行拓展并形成自己的的一套標(biāo)準(zhǔn),在標(biāo)準(zhǔn)中一個(gè)漢字占2個(gè)字節(jié),新的碼表可以表達(dá)65536個(gè)漢字。但一開始并沒有將碼表全部填充使用完,只收錄了常用的6000多個(gè)漢字、英文及其它符號(hào),這套標(biāo)準(zhǔn)稱為GB2312(信息交換用漢字編碼字符集,GB是“國家標(biāo)準(zhǔn)”的簡(jiǎn)化詞“國標(biāo)”的拼音首字母縮寫,2312是國標(biāo)序號(hào))。后來又制定了一套收錄更多漢字的標(biāo)準(zhǔn)(收錄的漢字有2萬多個(gè)),稱為GBK(漢字編碼擴(kuò)展規(guī)范,K是“擴(kuò)”的拼音首字母)。
        在GB2312或GBK里,許多標(biāo)點(diǎn)符號(hào)都使用2個(gè)字節(jié)進(jìn)行了重新編碼,這類占2個(gè)字節(jié)的標(biāo)點(diǎn)符號(hào)稱為“全角”字符(“全角”也稱“全形”或“全寬”或“全碼”),原來ASCII碼表中占1個(gè)字節(jié)的標(biāo)點(diǎn)符號(hào)則稱為“半角”字符(“半角”也稱“半形”或“半寬”或“半碼”)。全角的逗號(hào)、括號(hào)、句號(hào)等與半角是不一樣的:

        在中文輸入法下,默認(rèn)的標(biāo)點(diǎn)符號(hào)是全角字符;在英文輸入法下,標(biāo)點(diǎn)符號(hào)則是半角字符。
        我們接著講故事:隨著使用計(jì)算機(jī)的國家越來越多,各個(gè)國家制定自己的計(jì)算機(jī)編碼標(biāo)準(zhǔn)的情況也越來越多,導(dǎo)致的結(jié)果是:各國計(jì)算機(jī)的編碼互不支持、認(rèn)識(shí)。比如在美國的計(jì)算機(jī)里要顯示漢字,則必須安裝漢字系統(tǒng)才可以,否則中文文件在美國系統(tǒng)的計(jì)算機(jī)中打開便是亂碼。
        就這樣,在這個(gè)時(shí)期催生出了一個(gè)叫ISO的國際組織(International Organization for Standardization,國際標(biāo)準(zhǔn)化組織),著手解決各國的編碼問題。ISO統(tǒng)一制作了一個(gè)稱為UNICODE(統(tǒng)一碼、萬國碼、單一碼,Universal Multiple-Octet Coded Character Set,又簡(jiǎn)稱為UCS)的編碼方案,用于收錄地球上所有文字和符號(hào)。UNICODE字符分為17組編排,每組編排稱為平面(Plane),每個(gè)平面擁有65536個(gè)碼位,共計(jì)可以收錄1114112個(gè)字符(111萬個(gè)字符,足夠大的容量)。UNICODE編碼統(tǒng)一一個(gè)字符占2個(gè)字節(jié)。
        但UNICODE在很長一段時(shí)間內(nèi)無法推廣,直到互聯(lián)網(wǎng)的出現(xiàn),數(shù)據(jù)的傳輸與交換使各國之間的編碼進(jìn)行統(tǒng)一化成為迫切的需要。但早期的硬盤和網(wǎng)絡(luò)流量都非常昂貴,UNICODE編碼里的每個(gè)字符卻占用了2個(gè)字節(jié)的容量,于是為了節(jié)省文件存儲(chǔ)時(shí)所占的硬盤空間,也為了節(jié)省字符在網(wǎng)絡(luò)傳輸過程中所占用的網(wǎng)絡(luò)流量,又制定了基于UNICODE、面向傳輸?shù)谋姸鄻?biāo)準(zhǔn),這些面向傳輸?shù)臉?biāo)準(zhǔn)統(tǒng)稱為UTF(UCS Transfer Format)。UNICODE編碼與UTF編碼并不是直接的一一對(duì)應(yīng),而是要通過一些算法和規(guī)則來轉(zhuǎn)換。UNICODE與UTF的關(guān)系是:UNICODE是根本、基礎(chǔ)、目的,而UTF只是一種實(shí)現(xiàn)UNICODE的手段、方法、過程。
        常見的UTF格式有:UTF-8,UTF-16,UTF-32。其中UTF-8是互聯(lián)網(wǎng)上使用最廣的一種UNICODE的實(shí)現(xiàn)方式,它專為傳輸而設(shè)計(jì)。正因?yàn)閁TF-8是基于UNICODE而設(shè)計(jì)的傳輸實(shí)現(xiàn)方式,所以它能使編碼無國界,任意國家的文字都能在任意國家的電腦瀏覽器中里正常顯示。UTF-8最大的一個(gè)特點(diǎn)是:它是一種變長的編碼方式,它可以使用1~4個(gè)字節(jié)表示一個(gè)符號(hào),根據(jù)不同的符號(hào)而變化字節(jié)長度,當(dāng)能夠使用1字節(jié)表示一個(gè)符號(hào)時(shí),便使用1個(gè)字節(jié)來表示,如果需要2字節(jié)才能表示的符號(hào),便使用2個(gè)字節(jié)來表示,類推,直到4個(gè)字節(jié),從而節(jié)省硬盤存儲(chǔ)空間和網(wǎng)絡(luò)流量。
        所以我們的網(wǎng)站在開發(fā)時(shí)如果使用GB2312或GBK編碼,當(dāng)別的國家的電腦不支持漢字編碼,那么看到的將是亂碼,顯示出來類似這樣:口口口口口。而網(wǎng)站如果使用UTF-8編碼,則任意國家的電腦在打開網(wǎng)站時(shí)其內(nèi)容會(huì)自動(dòng)轉(zhuǎn)換成UNICODE編碼,并且由于現(xiàn)在的電腦都支持UNICODE編碼,從而能正常顯示任意文字!
        但是國內(nèi)很多的網(wǎng)站仍然使用GB2312或GBK編碼,這類網(wǎng)站通常只面對(duì)國內(nèi)用戶提供服務(wù),面對(duì)國內(nèi)用戶不會(huì)有顯示上的問題。只是如果面對(duì)其他國家的瀏覽者,這類網(wǎng)站被打開時(shí)很大程度上將呈現(xiàn)亂碼。
        為了網(wǎng)站的高兼容性與國際化,推薦網(wǎng)站使用UTF-8編碼,而不是使用GB2312或GBK編碼。
        指定網(wǎng)頁為UTF-8、GB2312和GBK的標(biāo)簽分別為:

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
        <meta http-equiv="Content-Type" content="text/html; charset=gbk">

        那么有一個(gè)問題出現(xiàn)了:網(wǎng)頁各種編碼的區(qū)別,僅僅是在于這一行meta標(biāo)簽的設(shè)置差別嗎??jī)H僅是“utf-8”這5個(gè)字符換成“gb2312”這6個(gè)字符之類的這種“小差別”嗎?
        不是的,差別不僅僅是這幾個(gè)字符的差別。當(dāng)網(wǎng)頁指定meta標(biāo)簽中的編碼為utf-8后,DreamWeaver在保存網(wǎng)頁時(shí)會(huì)自動(dòng)將網(wǎng)頁文件保存為utf-8的編碼格式(二進(jìn)制碼使用utf-8的編碼格式),meta標(biāo)簽中的utf-8編碼是為了告訴瀏覽器:這個(gè)網(wǎng)頁用的是utf-8編碼,請(qǐng)?jiān)陲@示時(shí)使用utf-8編碼的格式解析并呈現(xiàn)出來;而如果meta標(biāo)簽中指定編碼為gb2312,DreamWeaver在保存網(wǎng)頁時(shí)會(huì)自動(dòng)將網(wǎng)頁文件保存為gb2312的編碼格式(二進(jìn)制碼使用gb2312的編碼格式),同樣,meta標(biāo)簽中的gb2312編碼只是為了告訴瀏覽器:這個(gè)網(wǎng)頁用的是gb2312編碼,請(qǐng)?jiān)陲@示時(shí)使用gb2312編碼的格式解析并呈現(xiàn)出來。我們做個(gè)試驗(yàn),將一個(gè)文本文件分別保存為utf-8格式(打開記事本新建文本文件,輸入內(nèi)容后,選擇菜單:文件→另存為,編碼選擇為UTF-8)和gb2312格式(另存時(shí)編碼選擇為ANSI,ANSI代表當(dāng)前操作系統(tǒng)的默認(rèn)編碼,在簡(jiǎn)體中文Windows操作系統(tǒng)中,ANSI 編碼代表 GBK 編碼;在繁體中文Windows操作系統(tǒng)中,ANSI編碼代表Big5;在日文Windows操作系統(tǒng)中,ANSI 編碼代表 Shift_JIS 編碼,類推),對(duì)比其二進(jìn)制數(shù)據(jù)。這里使用UltraEdit-32文件編輯器對(duì)文本文件進(jìn)行16進(jìn)制查看,即使用16進(jìn)制查看文件的二進(jìn)制數(shù)據(jù):

        從上圖中可以看到,使用utf-8編碼和使用gb2312編碼保存的文件,其二進(jìn)制數(shù)據(jù)是不一樣的,即這兩個(gè)文件的二進(jìn)制數(shù)據(jù)內(nèi)容是不一樣的。記事本軟件在打開文本文件時(shí),會(huì)嘗試識(shí)別文件的編碼并進(jìn)行解析和顯示,即文字保存在記事本里,無論保存成utf-8編碼還是gb2312編碼,通常情況下記事本都能正常識(shí)別和顯示,不需要在文件里額外記錄數(shù)據(jù)以告知記事本該文件是什么編碼。但很多軟件卻無法做到智能識(shí)別文本文件的編碼,這就要求文本文件在保存時(shí),必須附帶一些特殊的內(nèi)容(額外的數(shù)據(jù))以告知該文件是什么編碼。UNICODE規(guī)范中有一個(gè)BOM(Byte Order Mark)的概念,就是字節(jié)序標(biāo)記,在文件頭部開始位置寫入三個(gè)字節(jié)(EF BB BF)以告知該文件是utf-8編碼格式。但這個(gè)BOM又帶出了新的問題:不是所有的軟件或處理程序都支持BOM,即不是所有的軟件或處理程序都能識(shí)別文件開頭的(EF BB BF)這三個(gè)字節(jié)。當(dāng)不支持識(shí)別時(shí),這三個(gè)字節(jié)又會(huì)被當(dāng)成文件的實(shí)際數(shù)據(jù)內(nèi)容。早期的火狐不支持對(duì)BOM的識(shí)別,當(dāng)遇到BOM時(shí)會(huì)對(duì)這三個(gè)字節(jié)顯示出特殊的亂碼符號(hào);而到目前為止,PHP處理程序仍然不支持BOM,即當(dāng)一個(gè)PHP文件保存為utf-8時(shí),如果附帶了BOM,那么PHP處理程序會(huì)將BOM解析為PHP文件的實(shí)際數(shù)據(jù)內(nèi)容而導(dǎo)致出錯(cuò)!在DreamWeaver中,選擇軟件頭部菜單:修改→頁面屬性(也可以直接按快捷鍵ctrl+j),在彈出的頁面屬性面板中點(diǎn)選“標(biāo)題/編碼”,即可看到可供選擇的編碼。通常在改變網(wǎng)頁的編碼時(shí),使用這種方式改變。如下圖:

        所以:當(dāng)我們?cè)趍eta標(biāo)簽中設(shè)置為utf-8編碼格式時(shí),網(wǎng)頁文件就必須要存儲(chǔ)為utf-8格式,這樣瀏覽器才能正常顯示網(wǎng)頁而不是顯示亂碼。如果在meta標(biāo)簽中設(shè)置utf-8編碼格式,網(wǎng)頁文件卻保存為gbk或其它格式,那么在打開網(wǎng)頁時(shí)瀏覽器會(huì)接到網(wǎng)頁meta標(biāo)簽中格式的通知:使用utf-8編碼格式來解析和顯示網(wǎng)頁,而網(wǎng)頁的二進(jìn)制碼(數(shù)據(jù)內(nèi)容)卻為gbk編碼或其它格式,顯示出來就會(huì)是亂碼!這好比相親時(shí),紅娘手里的資料有誤,錯(cuò)誤的告知男方:女方講英語(meta標(biāo)簽中設(shè)置為utf-8編碼)。結(jié)果女方卻不懂英語(文件卻不是utf-8編碼)。男方開口一句“Hello”就讓女方不知所謂了(亂碼)。
        我們來實(shí)驗(yàn)一下,網(wǎng)頁指定meta標(biāo)簽中的編碼為utf-8,文件卻保存為gbk格式:我們先用DreamWeaver編輯一個(gè)utf-8格式的網(wǎng)頁并保存,然后再用記事本打開該網(wǎng)頁,另存為,編碼選擇為ANSI。

        <!DOCTYPE HTML>
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>中文</title>
        </head>
        <body>
        本文件使用dreamweaver保存后,再使用記事本打開,并另存為ANSI編碼。
        </body>
        </html>

        在瀏覽器中的執(zhí)行結(jié)果如下:

        綜上所述:網(wǎng)頁開發(fā)時(shí),盡量使用utf-8編碼格式,并且在保存文件時(shí),保存為utf-8編碼。(dreamweaver在保存網(wǎng)頁文件時(shí),會(huì)根據(jù)<meta http-equiv="Content-Type" content="text/html; charset=編碼">所指定的編碼自動(dòng)保存為正確的對(duì)應(yīng)編碼,但如果使用其它網(wǎng)站代碼編輯器,比如記事本、Editplus等,就需要注意,在保存文件時(shí)要選擇為正確的編碼)。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        造成網(wǎng)頁亂碼的根本性原因是什么

        造成網(wǎng)頁亂碼的根本性原因是什么:先看段代碼:<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>網(wǎng)頁編碼</title&g
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 精品国产一区二区三区免费看| 国产中文字幕在线免费观看 | 亚洲男人的天堂一区二区| 亚洲精品福利你懂| 毛片网站免费在线观看| 2020亚洲男人天堂精品| 成人毛片免费视频| 亚洲色大18成人网站WWW在线播放| 久久久久久久免费视频| 亚洲色欲啪啪久久WWW综合网| 成人免费看黄20分钟| 色偷偷尼玛图亚洲综合| 免费国产不卡午夜福在线| 国产免费高清69式视频在线观看| 亚洲中文字幕视频国产| 两个人日本免费完整版在线观看1 两个人的视频www免费 | 亚洲人成免费网站| 午夜神器成在线人成在线人免费| 在线a级毛片免费视频| 永久免费无码日韩视频| 福利片免费一区二区三区| 成人免费视频一区二区三区| 亚洲精品福利你懂| 国产一级大片免费看| EEUSS影院WWW在线观看免费| 精品国产亚洲一区二区三区| 182tv免费观看在线视频| 亚洲日韩一区二区三区| 亚洲精品无码久久毛片| 99久久久国产精品免费牛牛四川 | 久久国产精品成人免费| 亚洲三级视频在线| 亚洲AV之男人的天堂| 91久久青青草原线免费| 国产精品无码亚洲一区二区三区| 久久久久亚洲AV无码专区网站| 一级做a爰全过程免费视频| 亚洲AV成人一区二区三区观看| 亚洲乱码日产一区三区| 67194成是人免费无码| 国产一级高青免费|