[討論] 我的 Big5 轉 UTF-8 的簡單程式

看板Perl作者 (肉肉的豬腳)時間19年前 (2006/09/16 07:18), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
我寫了以下的小程式來轉換檔案的內容從 Big5 變成 UTF-8, 並且加上 BOM 。遇到已經轉換過編碼,就不再轉換。 可是覺得似乎累贅的寫法很多,可是我已經沒辦法精簡了, 而且也不知道怎麼讓任何檔案(除了big5_to_utf8.pl自己) 都可以轉換。 不知道有沒有更好的寫法,還請多多指導。 # 讀入同一個目錄下的 data.txt 檔案 open (FILEHANDLE_R, "data.txt") or die "cannot open data"; open (FILEHANDLE_C, "data.txt") or die "cannot open data"; read(FILEHANDLE_C,$check_content,3); # 檢查 UTF8 BOM,如果已經有 UTF-8 BOM 的記號,則馬上離開 my $top1 = unpack("C", substr($check_content, 0, 1)); my $top2 = unpack("C", substr($check_content, 1, 1)); my $top3 = unpack("C", substr($check_content, 2, 1)); if($top1 eq 239 && $top2 eq 187 && $top3 eq 191) { print "The File is already with UTF-8 encodeing"; exit; } close (FILEHANDLE_C); # 如果沒有 UTF-8 BOM 記號則繼續將檔案轉換成 UTF-8 use utf8; binmode (FILEHANDLE_R, ":encoding(big5)"); while(read(FILEHANDLE_R,$line,1)) { $utf8_content .= $line; } close (FILEHANDLE_R); # 加上 BOM 紀錄,將 UTF8 的編碼內容寫入原檔案 open (FILEHANDLE_W, ">data.txt") or die "cannot write data"; $BOM=chr(0xFEFF); print FILEHANDLE_W $BOM; print FILEHANDLE_W $utf8_content; close (FILEHANDLE_W); # 離開 __END__ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.166.77.69 ※ 編輯: dkview 來自: 218.166.77.69 (09/16 07:22)
文章代碼(AID): #152pIyin (Perl)
文章代碼(AID): #152pIyin (Perl)