小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

記事本的編碼問題

 心之所指 2005-12-31

記事本的編碼問題

記事本的編碼問題,當(dāng)文檔中所有字符都在C0≤AA≤DF 80≤BB≤BF這個(gè)范圍的時(shí)候,notepad都無(wú)法確認(rèn)文檔的格式,沒有自動(dòng)按照UTF-8格式來(lái)"Display"。"聯(lián)通"就是C1 AA CD A8,剛好在上面的范圍內(nèi),所以不能正常顯示。 

  但是由于不夠詳細(xì),筆者就這一問題又特地咨詢了放飛技術(shù)網(wǎng)的高翅工程師,高工非常熱心的給我們帶來(lái)了更加詳細(xì)的解釋: 

  在計(jì)算機(jī)中字符通常并不是保存為圖像,每個(gè)字符都是使用一個(gè)編碼來(lái)表示的,而每個(gè)字符究竟使用哪個(gè)編碼代表,要取決于使用哪個(gè)字符集(charset)。 

  在最初的時(shí)候,Internet上只有一種字符集——ANSI的ASCII字符集,它使用7 bits來(lái)表示一個(gè)字符,總共表示128個(gè)字符,其中包括了英文字母、數(shù)字、標(biāo)點(diǎn)符號(hào)等常用字符。之后,又進(jìn)行擴(kuò)展,使用8 bits表示一個(gè)字符,可以表示256個(gè)字符,主要在原來(lái)的7 bits字符集的基礎(chǔ)上加入了一些特殊符號(hào)例如制表符。 

  后來(lái),由于各國(guó)語(yǔ)言的加入,ASCII已經(jīng)不能滿足信息交流的需要,因此,為了能夠表示其它國(guó)家的文字,各國(guó)在ASCII的基礎(chǔ)上制定了自己的字符集,這些從ANSI標(biāo)準(zhǔn)派生的字符集被習(xí)慣的統(tǒng)稱為ANSI字符集,它們正式的名稱應(yīng)該是MBCS(Multi-Byte Chactacter System,即多字節(jié)字符系統(tǒng))。這些派生字符集的特點(diǎn)是以ASCII 127 bits為基礎(chǔ),兼容ASCII 127,他們使用大于128的編碼作為一個(gè)Leading Byte,緊跟在Leading Byte后的第二(甚至第三)個(gè)字符與Leading Byte一起作為實(shí)際的編碼。這樣的字符集有很多,我們常見的GB-2312就是其中之一。 

  例如在GB-2312字符集中,“連通”的編碼為C1 AC CD A8,其中C1和CD就是Leading Byte。前127個(gè)編碼為標(biāo)準(zhǔn)ASCII保留,例如“0”的編碼是30H(30H表示十六進(jìn)制的30)。軟件在讀取時(shí),如果看到30H,知道它小于128就是標(biāo)準(zhǔn)ASCII,表示“0”,看到C1大于128就知道它后面有一個(gè)另外的編碼,因此C1 AC一同構(gòu)成一個(gè)整個(gè)的編碼,在GB-2312字符集中表示“連”。 

  由于每種語(yǔ)言都制定了自己的字符集,導(dǎo)致最后存在的各種字符集實(shí)在太多,在國(guó)際交流中要經(jīng)常轉(zhuǎn)換字符集非常不便。因此,提出了Unicode字符集,它固定使用16 bits(兩個(gè)字節(jié)、一個(gè)字)來(lái)表示一個(gè)字符,共可以表示65536個(gè)字符。將世界上幾乎所有語(yǔ)言的常用字符收錄其中,方便了信息交流。標(biāo)準(zhǔn)的Unicode稱為UTF-16。后來(lái)為了雙字節(jié)的Unicode能夠在現(xiàn)存的處理單字節(jié)的系統(tǒng)上正確傳輸,出現(xiàn)了UTF-8,使用類似MBCS的方式對(duì)Unicode進(jìn)行編碼。注意UTF-8是編碼,它屬于Unicode字符集。Unicode字符集有多種編碼形式,而ASCII只有一種,大多數(shù)MBCS(包括GB-2312)也只有一種。 

  例如“連通”兩個(gè)字的Unicode標(biāo)準(zhǔn)編碼UTF-16 (big endian)為:DE 8F 1A 90 

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

  最后,當(dāng)一個(gè)軟件打開一個(gè)文本時(shí),它要做的第一件事是決定這個(gè)文本究竟是使用哪種字符集的哪種編碼保存的。軟件有三種途徑來(lái)決定文本的字符集和編碼: 

  最標(biāo)準(zhǔn)的途徑是檢測(cè)文本最開頭的幾個(gè)字節(jié),如下表: 


例如插入標(biāo)記后,連通”兩個(gè)字的UTF-16 (big endian)和UTF-8碼分別為: 

  FF FE DE 8F 1A 90 

  EF BB BF E8 BF 9E E9 80 9A 

  但是MBCS文本沒有這些位于開頭的字符集標(biāo)記,更不幸的是,一些早期的和一些設(shè)計(jì)不良的軟件在保存Unicode文本時(shí)不插入這些位于開頭的字符集標(biāo)記。因此,軟件不能依賴于這種途徑。這時(shí),軟件可以采取一種比較安全的方式來(lái)決定字符集及其編碼,那就是彈出一個(gè)對(duì)話框來(lái)請(qǐng)示用戶,例如將那個(gè)“連通”文件拖到MS Word中,Word就會(huì)彈出一個(gè)對(duì)話框。 

  如果軟件不想麻煩用戶,或者它不方便向用戶請(qǐng)示,那它只能采取自己“猜”的方法,軟件可以根據(jù)整個(gè)文本的特征來(lái)猜測(cè)它可能屬于哪個(gè)charset,這就很可能不準(zhǔn)了。使用記事本打開那個(gè)“連通”文件就屬于這種情況。 

  我們可以證明這一點(diǎn):在記事本中鍵入“連通”后,選擇“Save As”,會(huì)看到最后一個(gè)下拉框中顯示有“ANSI”,這時(shí)保存。當(dāng)再當(dāng)打開“連通”文件出現(xiàn)亂碼后,再點(diǎn)擊“File”->“Save As”,會(huì)看到最后一個(gè)下拉框中顯示有“UTF-8”,這說明記事本認(rèn)為當(dāng)前打開的這個(gè)文本是一個(gè)UTF-8編碼的文本。而我們剛才保存時(shí)是用ANSI字符集保存的。這說明,記事本猜測(cè)了“連通”文件的字符集,認(rèn)為它更像一個(gè)UTF-8編碼文本。這是因?yàn)?#8220;連通”兩個(gè)字的GB-2312編碼看起來(lái)更像UTF-8編碼導(dǎo)致的,這是一個(gè)巧合,不是所有文字都這樣。可以使用記事本的打開功能,在打開“連通”文件時(shí)在最后一個(gè)下拉框中選擇ANSI,就能正常顯示了。反過來(lái),如果之前保存時(shí)保存為UTF-8編碼,則直接打開也不會(huì)出現(xiàn)問題。 

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多