Wednesday, November 24, 2010

早期中文編碼轉換

早期我用Windows時,用光碟備份了很多中文檔名的文件。當時還沒有Unicode,所以檔名是以Big5編碼。在Linux下,如果mount CD時沒有指定原編碼系統,所有的Big5中文檔名會被視為raw ASCII,直接轉成utf-8。比方說,檔名 台北.txt 就變成 ÑxÑ_.txt

轉回來的方法:

$ echo ÑxÑ_.txt | iconv -t 437 | iconv -f big5
台北.txt

437是extended ascii。

2013/09/26更新:另可參考 http://allencch.wordpress.com/2013/04/15/extracting-files-from-zip-which-contains-non-utf8-filename-in-linux/ 提出的以下工具:


env LANG=C 7z x file.zip
convmv -f big5 -t utf8 --notest -r . # for filename which is big5 coded

以下是我最近用的情形
env LANG=C 7z x file.zip
ls | iconv -t iso-8859-1 | iconv -f gb2312 # verify this is the right conversion sequence
convmv -f utf-8 -t iso-8859-1 --notest -r . convmv -f gb2312 -t utf-8 --notest -r .