關於『微軟/聯通』記事本問題的解釋-IT浪潮-北方網
新聞 | 天津 | 民生 | 廣電 | 津抖雲 | 微視 | 讀圖 | 文娛 | 體育 | 圖事 | 理論 | 志願 | 專題 | 工作室 | 不良信息舉報
教育 | 健康 | 財經 | 地產 | 天津通 | 旅游 | 時尚 | 購物 | 汽車 | IT | 親子 | 會計 | 訪談 | 場景秀 | 發布系統

"津雲"客戶端
  您當前的位置 : 北方網  >  IT浪潮  >  北方學院  >  軟件文庫  >  系統相關
關鍵詞:

關於『微軟/聯通』記事本問題的解釋


http://www.enorth.com.cn  2003-12-11 09:00

  事件源由:驚天發現!原來『微軟』和『聯通』有仇!

  我們已經知道這只不過是一個微軟的程序的BUG,但是究竟為什麼會出現這樣的情況呢?在新聞評論中,已經有讀者為我們作出了解釋:

  評論[26]網友:Soft於2003年12月10日13:24發表評論

  記事本的編碼問題,當文檔中所有字符都在C0?AA?DF 80?BB?BF這個范圍的時候,notepad都無法確認文檔的格式,沒有自動按照UTF-8格式來"Display"。"聯通"就是C1 AA CD A8,剛好在上面的范圍內,所以不能正常顯示。

  但是由於不夠詳細,筆者就這一問題又特地諮詢了放飛技術網的高翅工程師,高工非常熱心的給我們帶來了更加詳細的解釋:

  在計算機中字符通常並不是保存為圖像,每個字符都是使用一個編碼來表示的,而每個字符究竟使用哪個編碼代表,要取決於使用哪個字符集(charset)。

  在最初的時候,Internet上只有一種字符集——ANSI的ASCII字符集,它使用7 bits來表示一個字符,總共表示128個字符,其中包括了英文字母、數字、標點符號等常用字符。之後,又進行擴展,使用8 bits表示一個字符,可以表示256個字符,主要在原來的7 bits字符集的基礎上加入了一些特殊符號例如制表符。

  後來,由於各國語言的加入,ASCII已經不能滿足信息交流的需要,因此,為了能夠表示其它國家的文字,各國在ASCII的基礎上制定了自己的字符集,這些從ANSI標准派生的字符集被習慣的統稱為ANSI字符集,它們正式的名稱應該是MBCS(Multi-Byte Chactacter System,即多字節字符系統)。這些派生字符集的特點是以ASCII 127 bits為基礎,兼容ASCII 127,他們使用大於128的編碼作為一個Leading Byte,緊跟在Leading Byte後的第二(甚至第三)個字符與Leading Byte一起作為實際的編碼。這樣的字符集有很多,我們常見的GB-2312就是其中之一。

  例如在GB-2312字符集中,『連通』的編碼為C1 AC CD A8,其中C1和CD就是Leading Byte。前127個編碼為標准ASCII保留,例如『0』的編碼是30H(30H表示十六進制的30)。軟件在讀取時,如果看到30H,知道它小於128就是標准ASCII,表示『0』,看到C1大於128就知道它後面有一個另外的編碼,因此C1 AC一同構成一個整個的編碼,在GB-2312字符集中表示『連』。

  由於每種語言都制定了自己的字符集,導致最後存在的各種字符集實在太多,在國際交流中要經常轉換字符集非常不便。因此,提出了Unicode字符集,它固定使用16 bits(兩個字節、一個字)來表示一個字符,共可以表示65536個字符。將世界上幾乎所有語言的常用字符收錄其中,方便了信息交流。標准的Unicode稱為UTF-16。後來為了雙字節的Unicode能夠在現存的處理單字節的系統上正確傳輸,出現了UTF-8,使用類似MBCS的方式對Unicode進行編碼。注意UTF-8是編碼,它屬於Unicode字符集。Unicode字符集有多種編碼形式,而ASCII只有一種,大多數MBCS(包括GB-2312)也只有一種。

  例如『連通』兩個字的Unicode標准編碼UTF-16 (big endian)為:DE 8F 1A 90

  而其UTF-8編碼為:E8 BF 9E E9 80 9A

  最後,當一個軟件打開一個文本時,它要做的第一件事是決定這個文本究竟是使用哪種字符集的哪種編碼保存的。軟件有三種途徑來決定文本的字符集和編碼:

  最標准的途徑是檢測文本最開頭的幾個字節,如下表:

  例如插入標記後,連通』兩個字的UTF-16 (big endian)和UTF-8碼分別為:

  FF FE DE 8F 1A 90

  EF BB BF E8 BF 9E E9 80 9A

  但是MBCS文本沒有這些位於開頭的字符集標記,更不幸的是,一些早期的和一些設計不良的軟件在保存Unicode文本時不插入這些位於開頭的字符集標記。因此,軟件不能依賴於這種途徑。這時,軟件可以采取一種比較安全的方式來決定字符集及其編碼,那就是彈出一個對話框來請示用戶,例如將那個『連通』文件拖到MS Word中,Word就會彈出一個對話框。

  如果軟件不想麻煩用戶,或者它不方便向用戶請示,那它只能采取自己『猜』的方法,軟件可以根據整個文本的特征來猜測它可能屬於哪個charset,這就很可能不准了。使用記事本打開那個『連通』文件就屬於這種情況。

  我們可以證明這一點:在記事本中鍵入『連通』後,選擇『Save As』,會看到最後一個下拉框中顯示有『ANSI』,這時保存。當再當打開『連通』文件出現亂碼後,再點擊『File』->『Save As』,會看到最後一個下拉框中顯示有『UTF-8』,這說明記事本認為當前打開的這個文本是一個UTF-8編碼的文本。而我們剛纔保存時是用ANSI字符集保存的。這說明,記事本猜測了『連通』文件的字符集,認為它更像一個UTF-8編碼文本。這是因為『連通』兩個字的GB-2312編碼看起來更像UTF-8編碼導致的,這是一個巧合,不是所有文字都這樣。可以使用記事本的打開功能,在打開『連通』文件時在最後一個下拉框中選擇ANSI,就能正常顯示了。反過來,如果之前保存時保存為UTF-8編碼,則直接打開也不會出現問題。

  如果將『連通』文件放入MS Word中,Word也會認為它是一個UTF-8編碼的文件,但它不能確定,因此會彈出一個對話框詢問用戶,這時選擇『簡體中文(big5)』,就能正常打開了。記事本在這一點上做得比較簡化罷了,這與這個程序的定位是一致的。

  我們再次感謝高工給我們帶來的解釋,讓我們對這一現象有了比較清楚的認識。

編輯:趙海濤 pcpop
[進入IT論壇]
請您文明上網、理性發言並遵守相關規定,在注冊後發表評論。
 北方網精彩內容推薦
無標題文檔
天津民生資訊
天氣交通 天津福彩 每月影訊 二手市場
空氣質量 天津股票 廣播節目 二手房源
失物招領 股市大擂臺 天視節目 每日房價
熱點專題
北京奧運聖火傳遞和諧之旅 迎奧運 講文明 樹新風
解放思想 乾事創業 科學發展 同在一方熱土 共建美好家園
2008天津夏季達沃斯論壇 《今日股市觀察》視頻
北方網網絡相聲頻道在線收聽 2008高考招生簡章 復習衝刺
天津自然博物館館藏精品展示 2008年天津中考問題解答
帶你了解08春夏服飾流行趨勢 完美塑身 舞動肚皮舞(視頻)
C-NCAP碰撞試驗—雪佛蘭景程 特殊時期善待自己 孕期檢查
熱點新聞排行 財經 體育 娛樂 汽車 IT 時尚 健康 教育

Copyright (C) 2000-2021 Enorth.com.cn, Tianjin ENORTH NETNEWS Co.,LTD.All rights reserved
本網站由天津北方網版權所有