沉睡森林@漂在北京

          本處文章除注明“轉(zhuǎn)載”外均為原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            152 隨筆 :: 4 文章 :: 114 評(píng)論 :: 0 Trackbacks

          2008-05-26 17:27
          UltraEdit是一個(gè)非常強(qiáng)大的工具,但是,工具太強(qiáng)大了就會(huì)變成一個(gè)雙刃劍,用好了是好工具,用不好可能會(huì)存在很多的疑惑,在編碼方面UltraEdit存在一寫(xiě)令人費(fèi)解的問(wèn)題,本人做了一點(diǎn)點(diǎn)研究,與大家分享。

          主要的問(wèn)題來(lái)源于UTF
          -8的處理。

          Unicode規(guī)范中推薦的標(biāo)記字節(jié)順序的方法是BOM(Byte Order Mark)

          UTF
          -8不需要BOM來(lái)表明字節(jié)順序,但可以用BOM來(lái)表明編碼方式。如果接收者收到以EF BB BF開(kāi)頭的字節(jié)流,就知道這是UTF-8編碼了。
          由于UTF
          -8 BOM并沒(méi)有得到廣泛的支持,所以造成了一定范圍內(nèi)的不兼容。下面列出幾個(gè)主要工具對(duì)于BOM的處理。

          1.   notepad

          notepad 在保存時(shí),選擇UTF
          -8 格式,會(huì)在文件頭寫(xiě)上BOM header.讀取文件時(shí),會(huì)分析BOM和文件中是否有中文字符,進(jìn)而做出正確的選擇。

          2.   notepad++

          可以設(shè)置各種格式,有無(wú)BOM都支持。

          3.   editplus

          文件保存時(shí),選擇UTF
          -8 格式,不會(huì)在文件頭寫(xiě)上 BOM header.讀取可以識(shí)別UTF-8

          4.   ultraedit

          ultraedit在advanced
          ->configuration中可以選擇文件保存時(shí)是否寫(xiě)上BOM header.或者另存為中選擇。讀取是,如果沒(méi)有設(shè)置自動(dòng)檢測(cè)UTF-8或者部分無(wú)BOM文件會(huì)無(wú)法正常顯示。

          5.   Eclipse

          如果設(shè)置了文件的編碼問(wèn)UTF
          -8,那么文件保存為無(wú)BOM格式。讀取正常。

          6.   vi

          指的是Linux 下的vim, 如果UTF
          -8 文件開(kāi)頭有BOM header, 其能夠正常顯示UTF-8 編碼,否則,顯示為亂碼。

          UltraEdit的主要問(wèn)題

          1. 如果新建一個(gè)文件,選擇保存為UTF-8 無(wú) BOM格式,如果數(shù)據(jù)中沒(méi)有中文字符,或者h(yuǎn)arset=UTF-8,那么無(wú)論怎么保存,UE仍然會(huì)把文件保存為ANSI格式,這樣,以后再加入中文的時(shí) 候編碼方式也不會(huì)改變,這就會(huì)造成Java Build程序生成的腳本含有亂碼。

          2. 如果是正確的UTF-8無(wú)BOM格式,在前9205個(gè)字符中如果沒(méi)有中文,那么UE會(huì)頑固的認(rèn)為此文件是ANSI格式,所以導(dǎo)致文件中文亂碼(測(cè)試版本UE 13.10a)。解決辦法就是主動(dòng)的在前9205個(gè)字符前加入一個(gè)中文字符。

          3. 哭笑不得的UTF-8自動(dòng)檢測(cè)。在advanced->configuration->Unicode/UTF-8 Auto Check中有自動(dòng)檢測(cè)UTF-8的選項(xiàng),如果選擇,經(jīng)分析UE將采用三種檢測(cè)方式:

          a)   文件編碼的開(kāi)頭是否有【EF BB BF】字符(即BOM),如果有則認(rèn)為是UTF
          -8

          b)   檢查是否含有charset
          =UTF-8類(lèi)似的文字,如果有,那么認(rèn)為是UTF-8格式,這將導(dǎo)致以ANSI存儲(chǔ)的文件亂碼。

          c)   如果是UTF
          -8無(wú)BOM格式的文檔,UE會(huì)檢查前9205個(gè)字符是否含有中文字符,如果有,如果沒(méi)有則使用ANSI編碼進(jìn)行解析,造成后面的中文字符亂 碼。如果這個(gè)時(shí)候強(qiáng)制的用UE轉(zhuǎn)換為UTF-8,則亂上加亂,文件作廢。對(duì)于本身是ANSI格式存儲(chǔ)的文件,沒(méi)有此檢測(cè),中文正常。

          4. UE打開(kāi)UTF-8的文件默認(rèn)會(huì)轉(zhuǎn)換為UTF-16,影響不大。

          對(duì)于用戶

          1. UE打開(kāi)亂碼的問(wèn)題,在前9205字符中加入中文注釋可以解決此問(wèn)題,或者使用在UE的【文件】菜單中的【轉(zhuǎn)換】->【UNICODE/UTF-8 到 UTF-8(Unicode編輯)】進(jìn)行轉(zhuǎn)換。

          2. 不要使用UE來(lái)新建無(wú)中文的UTF-8無(wú)BOM文件。

          3. 不要在已經(jīng)亂碼的文件中,刪除亂碼然后添加中文再保存。

          4. 新建UTF-8無(wú)BOM文件可以使用Eclipse、Notepad++、EditPlus進(jìn)行

          5. 對(duì)于記事本保存的UTF-8腳本文件,Java Build程序也是可以識(shí)別的,但是Java文件不能使用記事本編輯編輯器無(wú)法識(shí)別文件頭的EF BB BF標(biāo)記。
          posted on 2010-06-11 16:59 王總兵 閱讀(1141) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: UltraEdit編碼問(wèn)題 2012-09-18 19:30 lostgdi
          useful for me , thank  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 钟山县| 宁武县| 石景山区| 菏泽市| 汝城县| 合作市| 磴口县| 湘潭县| 桑植县| 安国市| 海伦市| 双辽市| 遂昌县| 北流市| 雷波县| 柳江县| 礼泉县| 康马县| 泸定县| 鹤峰县| 根河市| 乾安县| 永宁县| 巧家县| 延寿县| 彰化县| 古丈县| 侯马市| 理塘县| 饶阳县| 博罗县| 突泉县| 钟祥市| 墨玉县| 三河市| 射阳县| 会昌县| 上高县| 蓬溪县| 平南县| 马尔康县|