2007/09/13

判別Big5或是Unicode

之前為了寫一個批次處理的小程式,
才發現這個點...
好不容易被我研究出來怎樣判斷這兩種編碼,
這過程中有跑去藍色小舖跟微軟的技術論壇發問,
說到這裡不免來發洩一下,
一開始阿~我在藍色小舖發問, 可是沒有人回應,
由於這是工作上需要的程式, 就很急...
於是我跑到微軟的技術論發問,
沒想到那邊的人真的是很跩, 又態度差,
MVP有什麼了不起阿!
這就讓我想到我在藍色小舖遇到的一個MVP (Allen Kuo)
他就說過一句話: 誰沒當過初學者阿!!
這句話讓我對她印象很深刻...
因為我真的是個打破砂鍋問到底的死孩子...
但是他還是很熱心的回答我, 真的讓我很感動...
總之他真的是很NICE的一位, 在此宣傳一下她的網站...
ALLEN KUO

好~~ 以上其實都是題外話....
趕快進入正題!!!
*****************************

問題起因於, 我在寫一隻批次處理文字檔的程式...
要把一個資料夾下所有的html塞入一段JS
一開始呢~~我直接開檔>寫入>關檔
在.NET裡面開檔的時候, 我是用預設的編碼格式,
我起初以為是依據檔案的編碼格式開檔, 結果~~
其實是依據系統預設的檔案編碼格式開檔,
這就導致有些是unicode的檔案編碼格式, 處理以後
會有亂碼的情況....

所以才會想在寫入之前知道檔案的編碼格式,
再依此編碼格式開檔, 如此就不會有亂碼了...
在台灣最常用的編碼格式不外乎就這兩隻,
所以我就只研究這兩種編碼格式並且判別之...


首先約略介紹一下編碼:
早期的編碼就只有ASCII編碼,
(只使用7個Byte, 所以是0~127)
到後因為不符使用所以才產生這麼多種編碼,
Big5的編碼格式:一個字元用兩個Byte
Unicode的編碼格式:一個字元用2~4個Byte來組成
但是又不能跟ASCII重疊, 所以這兩種編碼的每個字元
(不論幾個Byte)的第一個Byte都是從128開始,
也就是說第一個Byte的最前面的Bit為1..

如此~~
我們就可以再開檔的當下去檢查文件的每個Byte,
找出大於128的Byte在判斷接下來的1個字元
或是 接下來的1-3個字元是否符合Big5或是Unicode

雖然這樣判別很慢...但是最穩了八~~
在微軟技術論壇的那位很兇很臭屁的大大說:
阿就叫你判別BOM就好啦...

真不知道你是在兇怎樣的~~

這招不是不可行...
但是不是所有的unicode文件都有BOM的...

所以我在藍色小鋪得到幾位大大熱心的提點,
於是我就去了解編碼格式, 就 寫出來了~~
哈哈 哈哈~~

0 Comments:

張貼留言

<< Home