弟管理學校的網頁伺服器,該伺服器也同時是大家的分享檔案集散中心,是以Linux架設起來的,該伺服器以 Unicode 作為系統編碼,而其他Windows系統則是big5(MS950)編碼,最近我要讓另一台 Linux 的主機(Unicode)掛載該伺服器所分享的檔案,編碼轉換的問題讓我頭痛了一個禮拜,最後發現到該伺服器更新的內容並未於網頁中更新,以下便是弟從文件中找出來的設定:
目前(2009/08/12)最新版本的Samba仍存在下面的選項。
伺服器端語言設定選項有三個(/etc/samba/smb.conf中預設沒有這三個選項,需自行加入):
display charset = UTF8
dos charset = cp950
unix charset = UTF8
display 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 測試時,已經不存在,故應使用上面三個語言參數。
目前(2009/08/12)最新版本的Samba客戶端功能已經大幅的修改了連線方式,採用的檔案格式為 CIFS(Common Internet File System),已經不再有中文顯示問題(不論伺服器端是dos charset=UTF8 or CP950,也不論客戶端是Windows or Linux),若您的機器可以升級到最新版本的 Samba 客戶端,請使用下面的指令連線:
mount -t cifs -o username=my_name,password=my_pass //xxx.xxx.xxx.xxx/share_floder /dest
若您的機器無法更新到最新版本的 Samba 服務(如Embedded System),您可以參考以下的連線方式。
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 的參數在此範例中會失敗(是顯示字型失敗,不是掛載失敗)。
以上,請參考。

 

弟於日前決定將伺服器的作業系統編碼改為 Unicode ( /etc/sysconfig/i18n 中設定為 LANG="zh_TW.UTF-8" ),編碼上有些問題,上述的文章是因為這個原因所測試出來的結論。另外,將作業系統預設編碼改為 Uniocde 後,測試到現在仍有二個問題:
第一:掛載具有 big5 編碼的磁碟時,雖然不會有錯誤訊息,但是當從作業系統中複製具有中文或其他多語言檔名時,會有無法複製的錯誤。此問題解法敘述於底下文章的連結中。
第二:在 Windows 中,目前還沒有 FTP 的客戶端(如 CuteFTP,FileZilla 等)支援SFTP多語言顯示。此問題目前弟還無解,但是根據 FileZilla(http://filezilla.sourceforge.net/)的 mailling list 的文章中已經有網友解決此問題,目前所釋放出來的版本尚未支援,需等待一段時間,待該版本納入FileZilla支援後,才能夠正常顯示。在此有網友修正的執行檔(http://www.teatime.com.tw/~tommy/filezilla.zip),該執行檔為2.2.13版的執行檔,弟以2.2.17版本的套件覆蓋此執行檔能正常執行。或者另一個替代方案是使用 WebFTP(http://www.Web-FTP.org/) 與 phpWebFTP(http://www.v-wijk.net/) 從網頁中顯示中文,但此法無法支援續傳。
弟找到關於作業系統以 Unicode 編碼的中文顯示的一些解法的網頁,該往頁位於http://wiki.debian.org.tw/index.php/Unicode 該網頁有許多使用Unicode作為作業系統編碼會發生的錯誤。
當您要更新網頁資訊時,請您參考。

 

兩位大哥好:
小弟目前也有語言設定的困擾,目前小弟的狀況如下:
smb.conf
display charset = UTF8
dos charset = UTF8
unix charset = UTF8
這樣的結果我的ftp所看到的中英文都正常,上傳下載也沒問題,但如果我用網芳去看這個share時,中文檔名就會變成亂碼;同樣的,如果我在用網芳建立一個中文檔名,從ftp(用smbmount的share,沒有指定codepage)看到的亦會是亂碼(在網芳則是沒問題),這是否代表網芳和 ftp所使用的是不同的語系呢?
目前我所使用的kernel是2.4.31,kernel看menuconfig並不支援cp950,請問兩位大哥能給小弟一些建議嗎?
感謝~

针对以上问题,有两个回复:

回复一:

好像 kernel 的預設參數只能寫數字,所以,在 make menuconfig 時,直接輸入 950 即可。

根据以上回复,提问者作了应用修改,给出以下回复:

謝謝站長的回應,經過一些測試後,我已將相關code page (utf-8, cp950) load進kernel.
但相同問題仍然存在。若將smb.conf 設定如下:
display charset = UTF8
dos charset = UTF8
unix charset = UTF8
即可在ftp(用smbmount的share)與網芳"分別"顯示中文。
然而,ftp與網芳的中文還是不通的,這是否代表有一邊不是unicode呢?
應如何使兩邊都是使用unicide呀
謝謝兩位的回應。
Latrell.

 

回复二:

首先您得先確認您的 Linux 伺服器端是否為 UTF8 編碼,端看 /etc/sysconfig/i18n 中的設定,若您的 Linux 伺服器編碼為 UTF8 ,您的 samba 設定檔應採用:
display charset = UTF8
dos charset = cp950
unix charset = UTF8
若您的 Linux 伺服器端所設定的編碼為 big5 ( /etc/sysconfig/i18n 中設定為 LANG="zh_TW.UTF-8" ),則應採用:
display charset = cp950
dos charset = cp950
unix charset = cp950
另外,Windows 並不是使用 Unicode 的編碼,微軟有自己的一套方法解決多語言顯示問題,在繁體中文上 windows 是使用 big5 編碼(若用程式抓編碼法出來看會得到 MS950,對應到 Linux 上的 CP950,兩者都是 big5 編碼),這點在弟先前的文章中疏忽敘述這個部份,請見諒,也感謝您告知文章中的不足,弟馬上補上。

 

第二个提问:

鳥哥,你好!!俺是個菜鳥,有關于samba主機上查看共享資料亂碼問題想請教一下大家!
我的samba主機用的是Cent os 5.5 ,主機語言:i18n設定:LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
smb.conf設定:
unix charset = UTF-8
display charset = UTF-8
dos charset = cp950
在windows xp(繁體系統) 下訪問samba主機建立中文資料及資料夾一切正常,但在samba主機上看windows xp 寫入的中文資料件及文件夾都是亂碼,英文資料一切正常,請問大家這是哪裹的問題?感謝!!

 

 

回复:

您是如何在 Linux 環境下查閱檔名的?
是純文字模式?是圖形介面?還是透過 Windows 連線到 Linux 的 pietty 呢?
不同的環境得要考量到語系與軟體之間編碼的相關問題喔!

Samba编码设置方法的更多相关文章

  1. zend studio 字体大小修改,默认编码设置

    zend studio的字体感觉很小,很多用户不是很适应,修改方法如下: 第一步:进入设置窗口    windows -> preferences 第二步:进入修改字体的选项卡.    Gene ...

  2. 各种乱码,编码问题设置方法整理(UTF-8)

    一.tomcat中文乱码问题 打开tomcat安装目录,在conf文件夹中找到server.xml文件 ,找到   <Connector port="8009" protoc ...

  3. windows下vim编辑器,字符编码设置。

    在windows下的vim默认字符集修改 之前使用vim编辑器的时候碰到乱码的问题,后来在网上看了记下了:在vim编辑器中按esc进入命令模式 1.修改vim内部编码    set encoding= ...

  4. (转)mysql账号权限密码设置方法

    原文:http://www.greensoftcode.net/techntxt/2013410134247568042483 mysql账号权限密码设置方法 我的mysql安装在c:\mysql 一 ...

  5. UrlConnection doPost Https请求 、编码设置

    UrlConnection doPost Https请求 .编码设置 UrlConnection doPost方法 /** * 发送POST请求 * * @param url 请求地址url * @p ...

  6. iconv内容,convmv文件名,unix2dos,dos2unix文件格式转换,od/cut/wc/dd/diff/uniq/nice/du等命令,linux文件名乱码,文件名,文件内容,vim编码设置

    1.enconv文件名编码转换,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下 enconv -L zh_CN -x UTF-8 filename enconv -L GB2312 -x  ...

  7. Linux下将UTF8编码批量转换成GB2312编码的方法

    Linux下将UTF8编码批量转换成GB2312编码的方法 在sqlplus中导入UTF8编码的sql脚本就会出现乱码错误,这时就需要将UTF8编码转换成GB2312编码,下面为大家介绍下在Linux ...

  8. myeclipse乱码问题和 编码设置

    A    Myeclipse安装后编码默认是GB18030,外面的人一般推荐用UTF-8.如果在导入项目后发现乱码现象,那是编码设置设置不对. Eclipse 编码设置: 全局编码设置:编码设置的方法 ...

  9. dos命令窗口修改编码,CMD编码修改方法

    dos命令窗口修改编码,CMD编码修改方法 第一步,打开命令窗口有两种方法第一种:可以点击左下角的开始按钮,在运行里面输入CMD,然后敲回车2第二种:组合键WIN+R键,组合键后就会弹出窗口,然后输入 ...

随机推荐

  1. linux备忘和卸载

    linux上网 -------------------------------------------------linux卸载------------------------------------ ...

  2. 经典MapReduce作业和Yarn上MapReduce作业运行机制

    一.经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapR ...

  3. linux中查找命令find、locate、whereis、which、type的区别

    find find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/var/lib/locatedb)文件不同,find查找的是磁盘空间. locate locate命令其实 ...

  4. 机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明

    GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果.这个时候就是需要动脑筋了.数据量比较大 ...

  5. php screw加密与破解

    一.破解工具之php-screw-brute 1.项目地址 https://github.com/securifybv/php-screw-brute 2.项目介绍 此脚本可以恢复/爆破php scr ...

  6. C#中Math方法总结

    名称  说明      E  表示自然对数的底,它由常数 e 指定.    PI  表示圆的周长与其直径的比值,它通过常数 π 指定. Abs  已重载.返回指定数字的绝对值.      Acos   ...

  7. e4a 记录

    自动点击 浏览框.跳转("javascript:document.getElementById('按钮的ID').clcik();")

  8. 【Python】【demo实验24】【练习实例】【打印图样】

    原题: 打印出如下图案(菱形): * *** ***** ******* ***** *** * 我的源码: #!/usr/bin/python # encoding=utf-8 # -*- codi ...

  9. PAT A1036 Boys vs Girls(25)

    AC代码 #include <cstdio> #include <algorithm> using namespace std; const int max_n = 11000 ...

  10. 剑指offer4:重建二叉树(后序遍历)

    1. 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4 ...