在 FreeBSD 底下燒錄光碟有兩個步驟:
1. 將所需的資料 ( 檔案,音樂或全部 ) 包裝成一些特別格式的檔案。
2. 用 burncd 將這些檔案寫入光碟中。
mkisofs 就是 1. 的工具,也就是建立光碟影像檔。 而在 sysutils/cdrtools-cjk 可以建立 Chinese Big5 檔名,請使用 -J 的選項來使用它。
也可以參考這個網頁, mkisofs-NLS-CJK。
# mkisofs -a -f -l -r -J -o ~/test.iso ~/test/ # vnconfig vn0 test.iso # mount -t cd9660 /dev/vn0 /mnt/iso # ls /mnt/iso # umount /mnt/iso # vnconfig -u vn0 # burncd -e -v -s 6 -f /dev/acd1c data test.iso fixate
以上的範例是把 ~/test/ 目錄下的所有檔案, 建立成一個 test.iso,可以先用 du -s -h ~/test/ 檢察是否會超過您的光碟容量, 然後用 vnconfig 來測試,在測試前, 記得要先安裝 big5fs, 並按照 big5fs 的要求做好準備工作, 在搭配可以看到中文的 ls, 這樣子就可以在 FreeBSD 底下燒錄中文檔案了。
目前 ports 中的 mkisofs 雖然支援 nls,但是只有支援 one byte 的, 所以並不能作中文的轉換。
作者不採納 multu-byte NLS 的原因如下:
Both solutions requiere the complete set of tables to be compiled into mkisofs. There was no concept of reading files instead. I believe that it is better to try to use libiconv instead.
以下是筆者的日誌,大部分的人應該都不會感興趣的。
這篇文章是在看完 chinese/mkisofs 的 patch 寫下的日誌, mkisofs 目前是 cdrecord project 的一部份,cdrecord 目前在 sysutils/cdrtools 底下, 而 mkisofs 則是在 sysutils/mkisofs ,該 port 最主要的部份就是修正 mkisofs 的 joliet 對中文的支援問題, patch 分成兩個部份,convert_to_unicode 和 joliet_strlenm。
在 convert_to_unicode 部分,他會將所有的字作轉換,轉換成 2bytes的Unicode編碼,以常見的英文來說:
ABC -> 0A0B0C 3bytes -> 6bytes
而中文的部份:
0xA4E5(文) -> big5_to_unicode -> 0x6587 2bytes 2bytes
其實可以直接用 iconv 作掉整個轉換的部份。
而 joliet_strlen 的部分, 這邊是指定 joliet 所給予的 buffer size,預設全都是英文, 所以原本 3bytes 的 ABC 會變成 6bytes 的 0A0B0C, 但是中文的部份要修正成 2bytes 的中文出來還是 2bytes。
WWW: cdrecord project