歡迎您光臨本站 註冊首頁

samba的中文問題

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

samba的中文問題

我的 samba global設置如下
display charset = utf8
unix charset = utf8
dos charset = utf8
但是我用linux在samba文件伺服器里建立的中文目錄在windows顯示下是亂碼。而用windows建立的中文目錄則在linux下顯示為一堆問號。

我查閱了相關的資料。windows用的是unicode編碼 也就是utf16.如何設置使samba支持utf16?

附profile配置:
LANG="en_US.UTF-8"; export LANG
《解決方案》

看看RAYS大牛的文章
http://blog.openrays.org/blog.php?do=showone&tid=479
《解決方案》

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,看中文都沒有問題。

[ 本帖最後由 ljpwinxp 於 2008-7-29 08:40 編輯 ]
《解決方案》

謝謝大家,雖然問題暫時還沒解決
《解決方案》

換成GB2312 即可
《解決方案》

ljpwinxp 的資料不錯哦!
《解決方案》

cp936 或者 gb2312 可以。
《解決方案》

發現 samba中編碼的設置是需要和 系統環境變數一直的。
我改為了 en_US.UTF-8之後發現原先 smb.conf中指定的 cp936也變成亂碼了,把cp936改為 UTF-8即可。
《解決方案》

我查閱了相關的資料。windows用的是unicode編碼 也就是utf16.-----對!



如何設置使samba支持utf16? --------------linux ,unix  基本都不支持,或者需要間接(轉換后)支持,samba也無法支持.目前只能選win支持utf-8的方法.

linux unix和win對編碼方案理解的不同,
導致 中,日,韓 國人 用起來,亂碼滿天飛
導致 [我認為]linux,unix不適合大多數 中,日,韓 國人
《解決方案》

原帖由 aleng 於 2008-8-12 00:41 發表 http://bbs.chinaunix.net/images/common/back.gif
我查閱了相關的資料。windows用的是unicode編碼 也就是utf16.-----對!



如何設置使samba支持utf16? --------------linux ,unix  基本都不支持,或者需要間接(轉換后)支持,samba也無法支持.目前只能選win支 ...


我很偑服你,但你有沒有調查以後再發表意見呢?

[火星人 ] samba的中文問題已經有1287次圍觀

http://coctec.com/docs/service/show-post-25087.html