samba的中文问题

来源:互联网 发布:女生宿舍关系 知乎 编辑:程序博客网 时间:2024/05/21 17:35
俺是转贴的,^_^
针对中文简体windows来说,codepage=cp936
-------------------------------------------------------------------------------------------------
windows分很多语言,繁体的就是big5,简体一般为gb2312
伺服器端語言設定選項有三個(/etc/samba/smb.conf中預設沒有這三個選項,需自行加入):
display charset = UTF8
dos charset = cp950
unix charset = UTF8
輸出訊息到 stdout,stderr (也就是在伺服器自己的銀幕上顯示訊息)時所用的編碼。這邊應該是指輸出訊息,通常設定成與底下的unix charset選項相同。

dos charset = cp950
DOS客戶端連接到伺服器時,所使用的編碼。測試結果不管是Unix或windows都使用這個編碼設定,在設定該伺服器給中文Windows存取時,應使用這個新的參數,在smb.conf裡面沒有 950 這種參數,一定是 "cp950",google上面有些文章寫950,少了cp 兩個字元,那是不正確的,在 testparm 檢查時會失敗。

unix charset = UTF8
本機Linux檔案系統所使用的編碼方式。Samba必須要知道本機的編碼方式,才能正確的轉換要送給客戶端的訊息,這個選項在一般情況下,應與您 Linux 伺服器系統編碼相同,也就是 /etc/sysconfig/i18n內所設定的編碼方式。


範例1.Linux作業系統編碼為 big5 (換句話說,/etc/sysconfig/i18n裡面所設定的預設編碼是 Big5 時),而Samba Server要分享檔案給繁體中文的 Windows 系統時,則伺服器該如下設定:
display charset = cp950
dos charset = cp950
unix charset = cp950

範例2.Linux作業系統編碼為Unicode,而Samba Server要分享檔案給繁體中文的 Windows 系統時,則伺服器該如下設定:
display charset = UTF8
dos charset = cp950
unix charset = UTF8

簡單的說,在一般情況下,"display charset"與"unix charset"選項設定成與作業系統編碼相同(/etc/sysconfig/i18n),"dos charset" 選項設定成 cp950即可,特殊情況調整客戶端的掛載方式也能正確接收編碼。

註1:"client code page = 950" 這個參數在 FC4版本以 testparm 測試時,已經不存在,故應使用上面三個語言參數。

註2:Windows 並不是使用 Unicode 的編碼,微軟有自己的一套方法解決多語言顯示問題,在繁體中文上 windows 是使用 big5 編碼(若用程式抓編碼法出來看會得到 MS950,對應到 Linux 上的 CP950,兩者都是 big5 編碼),雖然在某些情況下似乎可以顯示多語言,那是因為作業系統所使用的"字集"有囊括某些其他語言的文字,而"字集"與"編碼"在 Unicode 的定義上是分開的,在此不多贅述,以免大家對這些名詞混淆,若對此有興趣的朋友可以一起討論。



Client 端掛載的語言選項也有三個(使用 mount 或 smbmount 指令掛載時,加在 -o 選項後面):
iocharset = UTF8
codepage = cp950
unicode

iocharset = UTF8 指定本機電腦所使用的編碼方式。這個選項在一般情況下,應與您 Linux 客戶端主機所使用的編碼方式相同,也就是 /etc/sysconfig/i18n 內所設定的編碼方式。
codepage = cp950 指定遠端伺服器送出訊息的編碼方式。
unicode 使用 unicode 來與伺服器通訊。


範例1.將Linux當作客戶端,掛載另一台 Linux Samba Server,而該 Server 中的 "dos charset" 設定成 cp950 時,應如下掛載:

mount -t smbfs -o username=my_name,password=my_pass,codepage=cp950 //xxx.xxx.xxx.xxx/share_floder /dest


範例2.將Linux當作客戶端,掛載另一台 Linux Samba Server,而該 Server 中的 "dos charset" 設定成 UTF8 時,應如下掛載:

mount -t smbfs -o username=my_name,password=my_pass,codepage=UTF8 //xxx.xxx.xxx.xxx/share_floder /dest


範例3.將Linux當作客戶端,掛載另一台繁體中文 Windows 系統的分享目錄時,應如下掛載:

mount -t smbfs -o username=my_name,password=my_pass,codepage=cp950 //xxx.xxx.xxx.xxx/share_floder /dest

關於掛載的方式,端看 Samba Server 所送出來的字型編碼是何種編碼(dos charset 選項),客戶端只要使用相同的編碼接收便能正確顯示。而使用 iocharset=cp950 的參數在此範例中會失敗(是顯示字型失敗,不是掛載失敗)。

附上我的SAMBA的语系:
/etc/sysconfig/i18n
LANG="en_US.UTF-8"
SUPPORTED="zh_HK.UTF-8:zh_HK:zh:zh_CN.UTF-8:zh_CN:zh:zh_SG.UTF-8:zh_SG:zh:zh_TW.
UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

/etc/samba/smb.conf
display charset = UTF8
dos charset = cp950
unix charset = UTF8

这样的设置,我的环境是有REDHAT ENT 5.1 客户是winxp简体和繁体和英文版,其中英文版选的内码是中文RPC。不管从哪个电脑上传文件到SAMBA,看中文都没有问题。