Re: [問題] does not map to big5-eten

看板Perl作者 (撫星)時間14年前 (2011/03/22 19:20), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
很感謝liyih大分享這兩個函式, 我想有這兩個函示, 應該就能處理絕大部分的狀況 我把您的code拿來用, 但修改了幾個小地方: 1. 多加上 use Encode; 這樣 encode, decode方能運作 2. 在convert_to_utf8中, 多加入$data是否原本就有\n的判斷 如果沒有 就不必在最後多補上\n 3. $is_safe = $is_safe // 1; #使用defined-or 4. 不過from_to函式仍被說是undefined, 不知道該use哪個模組? 另外我把perl可能會遇到編碼的部分重新思考了一下 1. 輸出部分(print), 目前看來似乎一定要硬轉big5, 才不會有字元map不了的狀況。 也就是說 如果Perl輸出utf-8到Dos, 到最後還是會被轉成 big5 這部份似乎是無解, 所以還是只好自己先在程式裡轉。 至於寫入檔案、在unicode下的Unix等環境情形如何尚待測試 2. 使用者透過STDIN輸入的資料, 處理過程尚未確認。 3. 外部資料, 例如我用LWP::Simple::get抓取的網頁檔, 或是glob "*.txt" 所抓取的檔名資料串, 則可能出現編碼混雜或不明確的狀況 可用l大的函式硬轉utf-8 4. 程式內部字串, 或是要進一步分析外部資料時, 似乎得是big5才有辦法處理。 我原本都是加上 use encoding 'big5', Filter=>1; 但有了l大兩個函式後, 不知道還需不需要這條。 至於Perl到底能不能直接處理unicode? 像Windows底下寫C++, 就支援 L"中文" 這樣的unicode字串常數。 如果把整隻程式存成unicode而不是ANSI的話, Perl會無法編譯。 所以我的結論是, 如果Perl真的不能處理Unicode, 那麼外部資料都應該轉big5處理(反正最後輸出也是要big5), 而字串常數因為檔案本來就是ANSI存檔, 所以不用特地再轉。 只是要記得 既然要處理big5, 就要加上 use encoding 'big5' 以上是我的一些想法, 也包含了ㄧ些問題。 畢竟 如果能處理所有unicode文字, 這樣才比較方便。 下面是我運用成功的例子: my @files = glob "相片000??.jpg"; #中文常數 不必額外處理 $_ = utf8_to_big5(convert_to_utf8($_)) foreach (@files);#先硬轉utf8再轉到big5 print join "\n", @files; 比較奇怪的地方是明明檔名理當都是unicode, 卻還是要全轉utf8一次 (猜測可能先被decode過了) 接下來我還會做更多測試, 也希望能把脈絡搞得更清楚。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.243.163.36 ※ 編輯: StarTouching 來自: 111.243.163.36 (03/23 01:34)
文章代碼(AID): #1DY8OMer (Perl)
文章代碼(AID): #1DY8OMer (Perl)