国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

網頁亂碼引發(fā)的思考

2015-09-10 07:22:44張北一
中國信息技術教育 2015年23期
關鍵詞:編碼方式記事本二進制

張北一

網頁設計與制作是北京市現(xiàn)行信息技術教材信息技術基礎中的重要內容。教師在備課時通過研讀教材可以發(fā)現(xiàn),網頁是加工和表達信息的一種強大載體,基本網頁制作技術也是高中生應會的基本技能。

教材第四單元第三節(jié)指出,網頁是使用HTML語言編寫的純文本文件。瀏覽器根據(jù)文件中所寫的標簽來進行顯示并賦予不同文本不同的樣式。所以理論上,所有文本編輯軟件皆可用來編寫網頁。例如,Windows記事本、Sublime Text、GNU Nano都可以勝任網頁編輯工作。在教學實踐中,常有學生使用Windows系統(tǒng)自帶的記事本軟件編寫和修改.html文件,此時就可能會有學生遇到“記事本”編寫的中文頁面在瀏覽器中亂碼的問題,具體情況我們可以用一組實驗來說明。

實驗過程

我們使用微軟Windows7 64位簡體中文操作系統(tǒng)和internet explorer 11進行測試。測試步驟如下。

1.打開記事本軟件,輸入.html文檔中必要的html、head、body標簽。并在body標簽下輸入文本“This is a test.這是一個測試”。寫法上頁如上頁圖1所示。

2.將文件按默認配置保存為index.html。

3.打開internet explorer,將index.html拖拽到瀏覽器窗口中。發(fā)現(xiàn)英文字符顯示正常,但中文顯示為亂碼(如圖2)。

4.查閱網上資料后,可得知通過調節(jié)瀏覽器“編碼”選項可以解決這一問題。我們在瀏覽器窗口內點擊鼠標右鍵,在“編碼”一項中勾選“自動選擇”(如圖3)。此后發(fā)現(xiàn)中文字符顯示正常。

5.取消自動選擇選項,嘗試手動選擇編碼方式為“簡體中文(GB2312)”或“Unicode(UTF-8)”。發(fā)現(xiàn)選擇“簡體中文(GB2312)”時中文字符正常顯示;選擇“Unicode(UTF-8)”時中文字符亂碼。

6.確定了中文顯示問題是由編碼方式引起的,那么回到記事本軟件并打開index.html,重新檢查保存文件時的選項,發(fā)現(xiàn)也有“編碼”一項。其默認值為“ANSI”。我們將其調節(jié)為瀏覽器編碼選項中出現(xiàn)過的“UTF-8”并重新使用瀏覽器打開index.html后發(fā)現(xiàn)中文字符正常顯示。

7.保持index.html的編碼方式為UTF-8不變,使用瀏覽器打開并設置瀏覽器編碼方式為“簡體中文(GB2312)”,發(fā)現(xiàn)中文顯示亂碼。

8.繼續(xù)對其他語種文字進行驗證。我們先加上一行日語(如圖4)。分別以ANSI、Unicode、UTF-8來保存文件,并使用瀏覽器以GB2312、Unicode和日語(EUC)來瀏覽這個文件。結果如表1所示。

9.再增加一行法語字符,這里面特別注意要包含法語中特有的字母“”,重復第八步的實驗。從中我們發(fā)現(xiàn)保存為ANSI編碼文件的時候系統(tǒng)提示無法保存該文件(如下頁圖5)。所以只存為Unicode和UTF-8兩種格式。結果如下頁表2。

由上面的實驗我們可以得知,當保存文件所選的編碼和瀏覽器設置的編碼器一致時,各種字符皆顯示正常。不一致時,部分字符會出現(xiàn)亂碼。為了避免用戶頻繁切換編碼方式,瀏覽器開發(fā)者均設置了“自動選擇”選項來幫助用戶自動切換編碼方式。但實驗中還引發(fā)了三個問題:①為什么保存文件和瀏覽文件時必須選擇一致的編碼方式才能保證文件的正常顯示?②實驗證實ANSI和GB2312應屬同一種編碼方式,但為何名稱不同?二者又有什么關系?③在瀏覽器設置中Unicode被寫作“Unicode(UTF-8)”,但記事本軟件的保存選項卻將“Unicode”和“UTF-8”列為不同的選項,這兩者又是什么關系?

下面我們就來針對這三個問題逐一討論。

文字在計算機內的表達

我們知道計算機內部存儲信息是靠“0”和“1”這兩個二進制數(shù)實現(xiàn)的。如果想表達其他的文字和符號,就要想一個辦法用“0”和“1”來進行指代。最早的ASCII碼就是使用八位(1字節(jié))二進制數(shù)來指代數(shù)字、小寫英語字母、大寫英語字母和常用符號的規(guī)則。其中首位統(tǒng)一規(guī)定為0,此后的7位來表示不同的符號。表3為a、b、c三個小寫英文字母與其二進制編碼的對應關系。

這種把字符轉換為二進制數(shù)在計算機內存儲的做法即為“編碼”。ASCII僅能滿足英語語言中文字的表達,應用范圍十分有限。為了方便世界各國文字和符號都能利用計算機進行存儲和傳輸,國際標準化組織和各國的標準化結構都編制了各種文字編碼方式,我們在實驗中看到的GB2312、Unicode都是常用的編碼方式。每種編碼方式都自成一體地規(guī)定了文字和二進制數(shù)之間的對應關系。多數(shù)情況下,不同編碼方式的“文字—二進制數(shù)”對應關系是不同的。我們在記事本軟件中保存文件就是把文字轉換為二進制數(shù)的過程,用瀏覽器瀏覽文件就是把二進制數(shù)翻譯為文字的過程。如果這兩個過程的標準不一致,必然會出現(xiàn)千奇百怪的混亂符號,也就是亂碼。例如,GB2312中的漢字“中”十六進制編碼為“D6D0”,轉換為二進制為“11010110 11010000”。如果用另一種編碼方式Unicode來翻譯這組二進制數(shù),則對應字符“”,明顯和原文不符。這里要注意的是,目前多數(shù)編碼方式對英語字母的二進制表達都是一致的,所以在實驗第八步中英語字母總能正常顯示。

漢字編碼在編程中應用十分廣泛。例如,Arduino單片機支持一種朗讀中文的語音合成模塊。在源代碼中會以十六進制數(shù)組成的數(shù)組來確定發(fā)音內容。使用說明中會寫清模塊支持的編碼方式,以便開發(fā)者查閱漢字和其十六進制數(shù)的對應關系。如果代碼中寫道uint8_t text[]={0xB3,0xC9},其中B3C9在gb2312中就是“成”字。模塊在工作時就會發(fā)出“成”字的讀音。除了語音模塊,在對液晶顯示模塊時也需要依靠十六進制數(shù)來指代漢字。

文字編碼在網絡傳輸中同樣普遍存在。我們在瀏覽中文維基百科時,瀏覽器地址欄中會顯示形如“https://zh.wikipedia.org/wiki/中國”的地址,而將網址復制到文本編輯器中就會發(fā)現(xiàn)其中的“中國”變成了“%E4%B8%AD%E5%9C%8B”。這就是因為在傳輸?shù)臅r候“中國”被使用UTF-8編碼成了十六進制數(shù)添加到網址中,而瀏覽器在收到網址后又將其解碼成了漢字并在地址欄顯示出來。

ANSI與GB2312編碼

理解了“編碼”的含義后,我們就明白了記事本軟件和瀏覽器中“編碼”選項的作用了。那么記事本軟件中默認的“ANSI”又是一種什么編碼方式呢?實際上ANSI在不同語言的操作系統(tǒng)上指代的編碼方式是不一樣的。當我們選擇編碼為“ANSI”時,系統(tǒng)會從一種被稱為“Code Page”(代碼頁)的編碼標準中集中選取與當前操作系統(tǒng)語言和區(qū)域設置相符的編碼標準。在微軟MSDN網站的Code Page Identifiers文檔中明確記載簡體中文操作系統(tǒng)應選的Code Page標識符為“936”,名稱為“gb2312”,附加信息中解釋為“ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312)”。說明系統(tǒng)為中國和新加坡的中文用戶選擇GB2312為指定編碼方式。而GB2312是中國國家標準總局所頒布的《信息交換用漢字字符集》,也就是我國所統(tǒng)一規(guī)定的漢字編碼依據(jù)。其中規(guī)定了包含英語字母、中文漢字、日語假名、希臘字母等7445個符號。這就是為什么選擇以ANSI保存文件后應該將瀏覽器“編碼”選項設置為“簡體中文(GB2312)”才能正常閱讀漢字和日文的原因。

ANSI Code Page是Windows操作系統(tǒng)獨有的編碼方式集合,其包含了很多種適用于各國語言的編碼方式。在Windows中,用戶也可以自己決定系統(tǒng)選擇何種編碼方式來解碼應用程序中的文字符號。我們可以在“控制面板→區(qū)域→管理→更改系統(tǒng)區(qū)域設置”這一選項中選擇。中國大陸一般會選擇為“中文(簡體,中國)”。如果經常運行繁體中文軟件,則可以選擇為“中文(繁體,香港特別行政區(qū))”等。

有一些Windows軟件可能不會在編碼方式選項中直接提供“ANSI”選項,但會提供含有Code Page標識符的選項,讓用戶不受系統(tǒng)自動選擇編碼方式的限制。在我們常用的SSH工具“Putty”中,其“Translation”選項中就提供了形如“Win 1250”“Win 1256”等選項。其中“1250”“1256”就是Code Page標識符,分別代表了中歐和阿拉伯。

Unicode編碼

GB2312雖然能解決大部分的我國常用文字符號的編碼問題,但其中仍然沒有包含法語等其他國家的字符。那么有沒有一種編碼方式能解決各國所有文字的編碼問題呢?答案是肯定的,那就是實驗第九步中系統(tǒng)向我們提示的“Unicode”。Unicode是由Unicode協(xié)會定制、發(fā)布的一種針對各國文字、符號進行編碼的編碼方式。所以Unicode又被稱為“萬國碼”。Unicode誕生時規(guī)定用16位二進制數(shù)來表示一個文字或符號。但最早的Unicode和ASCII有一定差異,導致原本處理ASCII的程序沒法直接處理Unicode編碼的文字。于是Unicode協(xié)會又制定了一種Unicode的變種編碼方式,稱為UTF-8。UTF-8中,理論上最多能用48位二進制數(shù)(6字節(jié))來表示一個文字或符號。對于單字節(jié)符號,UTF-8與ASCII一致,使得原本處理ASCII的軟件幾乎不用做專門的修改就能處理UTF-8與ASCII的交集中的文字和符號。表示ASCII以外的文字時,則在前8位中加入說明本字符共需要多少位的信息。我們在記事本軟件中看到的“Unicode”選項的含義是每個字符占用16位的標準Unicode編碼方式;“UTF-8”專指Unicode的變種UTF-8。當我們選擇瀏覽器選項中的“Unicode(UTF-8)”時,瀏覽器會自動判斷使用標準Unicode或者UTF-8。

在使用計算機處理非ASCII符號時要謹慎選擇其編碼方式。通用性良好的編碼方式能使用戶所編碼的信息在各種環(huán)境下都能被輕松解碼。例如,信息技術基礎第三單元第二節(jié)中介紹了使用數(shù)據(jù)庫存儲信息。我們在MySQL等數(shù)據(jù)庫管理系統(tǒng)中建立數(shù)據(jù)庫時,編碼方式就是一個重要的選項。選擇UTF-8等包含字符量大、通用性強的編碼方式會有助于各種應用程序(如PHP腳本程序)被順利讀取和解碼數(shù)據(jù)庫中的文字信息。也有利于正確地存儲用戶所提交的小語種文字、生僻字等文字符號。

以上就是對計算機文字編碼的簡要介紹。文字編碼是信息技術中的基礎知識。本文介紹的文字對十六進制數(shù)或二進制數(shù)代碼轉換標準是公開的。如果使用一種不公開的轉換標準,就可以實現(xiàn)對文字的加密,由此則可以延伸討論更多的話題。

猜你喜歡
編碼方式記事本二進制
做個樹懶記事本
用二進制解一道高中數(shù)學聯(lián)賽數(shù)論題
小狗記事本
童話世界(2020年29期)2020-09-25 07:39:50
有趣的進度
二進制在競賽題中的應用
動物園
GCOA算法
價值工程(2017年22期)2017-07-15 04:21:23
可穿戴式多通道傳感系統(tǒng)功能需求分析及設計
土撥鼠的記事本
混合編碼方式自適應差分進化算法優(yōu)化設計寬帶天線
罗山县| 且末县| 罗源县| 霍林郭勒市| 高雄县| 科技| 瓮安县| 钦州市| 清远市| 平山县| 竹溪县| 鹰潭市| 沧州市| 衡东县| 明星| 南陵县| 昭通市| 临城县| 乌拉特后旗| 容城县| 稷山县| 石家庄市| 台中县| 阳泉市| 皮山县| 隆昌县| 虞城县| 天等县| 宿迁市| 武威市| 松溪县| 称多县| 旌德县| 柳河县| 康乐县| 集安市| 潼南县| 忻州市| 额敏县| 白沙| 盈江县|