Sharing chinese file names between samba and Windows
因為我的 FreeBSD server 上的 Samba,無法正確處理從 Windows 建立的中文檔名,從 FreeBSD 上看是亂碼,因此,只好乖乖地上 FreeBSD Chinese HOWTO[1] 找到這節《Samba - 網路芳鄰,資源分享程式》,照著上面所述,在 /usr/local/etc/smb.conf 的 [global] 區段加上下面這些設定:
[global]...mangling method = hashunicode = ondos charset = UCS-2LEunix charset = CP950display charset = CP950
其中,mangling method 的意思不太懂,所以上 Google 找到這頁《The Unofficial Samba HOWTO》的說明:
Mangling Method Name mangling is a method where Windows allows long filenames to retain a short filename equivalent. For example,
C:\Program Filescan also be referred to asC:\PROGRA~1. There are two algorithms available,hashandhash2. If you store a lot of files on your server, you can help to avoid name collisions by adjusting your global parameter section withmangling method = hash2.
設定至此,在 Samba 與 Windows 之間分享 (繁體) 中文檔名,大致上沒什麼問題了。只剩下一個問題:以 . 開頭的 UNIX 檔名,到了 Windows 上,卻變成了以三個底線為延伸檔名的 8.3 格式短檔名。於是我的 ~ 從 Windows 上看,就變成了這副鳥樣:
將以 . 開頭的檔名,在 Windows 改用 .___ 延伸檔名呈現,我想這還算是一個可以被接受的妥協方案,因為 Explorer 不允許檔名 (不管是檔案或目錄) 沒有主檔名,直接以 . 開頭[2] [3]。但變成舊式 8.3 格式的短檔名,引用 mangling method 把原本的檔名 hash 成慘不忍睹的樣子,就不曉得這究竟是為了什麼了。
更新 2005-11-02 下午:
下午用上面的設定工作時,TortoiseSVN 被「以 . 開頭的檔名被 hash 成慘不忍睹」的問題影響到,無法正常運作。
更新 2005-11-02 晚:
測了一下,mangling method 改設成 hash2,就不會發生「以 . 開頭的檔名被 hash 成慘不忍睹」的問題了。這個可能跟 OS 有關,我測的 Windows 端都是 WinXP SP2。用 Win2K 的朋友可以試試看用 hash 跟用 hash2 有什麼差別。
另外,也發現如果沒有用 unicode = on 的話,把 dos charset 也設成 CP950 也是可以中文互通的。當然,理論上用 unicode 會比較好。所以,總結一下,Windows 端使用 WinXP SP2 的話,可以有以下兩種設法:
1. 讓 Windows 端使用 unicode:
[global]...mangling method = hash2unicode = ondos charset = UCS-2LEunix charset = CP950display charset = CP950
2. 兩邊都使用 Big5/CP950
[global]...dos charset = CP950unix charset = CP950display charset = CP950
- Linux 使用者也可以多多參考這個 FreeBSD Chinese HOWTO 喔,很有用的。 ↩
- 實際上,在 Windows 還是可以建立以 . 開頭的檔名的。只是 GUI 的 Explorer 介面不允許,會跑出個對話框罵人。只要使用「命令提示字元」進去用 mkdir 或 rename 指令,就可以順利建立以 . 開頭的檔名,且回來用 Explorer 看還是可以看得到且正常使用 (上面有圖為證)。 ↩
- TortoiseSVN 也因為 VS.NET bug with web projects 的類似問題,另外做了一個特別版本,用 _svn 取代 .svn。 ↩

Post a Comment