弟管理學校的網頁伺服器,該伺服器也同時是大家的分享檔案集散中心,是以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 md5sum 命令

    Linux md5sum 命令 通过 Linux 的 md5sum 命令,可以对指定的文件,计算出唯一的一个MD5值(128bit). 通过比较文件前后的MD5值,可以判断文件是否发生变化(是否被修改 ...

  2. python中计时模块timeit的使用方法

    timeit 模块: timeit 模块定义了接受两个参数的 Timer 类.两个参数都是字符串. 第一个参数是你要计时的语句或者函数. 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导 ...

  3. 小米6使用charles抓包https

    1. 下载charles 地址: https://zhubangbang.com/charles-crack-version-free-download-and-install-tutorial.ht ...

  4. 【CSS】我的颜色到底听谁的?—— css的层叠性

    我们之前学了很多个选择器,都可以帮我们定位到具体标签上,然后我们在设置样式.但这也不可避免会产生一个问题:如果多个选择器同时指向同一个标签,那么到底该听谁的??? css一定有自己的机制来处理这个问题 ...

  5. 决策树、随机森林与k-means聚类算法

    决策树的构建满足信息熵增益最大化原则 决策树的优点: 可解释性高 能处理非线性的数据 不需要数据归一化 可以用于特征工程 对数据分布没有偏好 广泛使用 容易软件实现 可以转化为规则 决策树的弱点 启发 ...

  6. Linux下测试ZLAN 5800

    今天师兄让帮忙测试ZLAN 5800八串口通信模块,windows下的测试按照手册来已经搞定,接下来是Linux下的测试. 因为厂家不提供Linux下的相关资料,所以需要在windows下设置好后直接 ...

  7. SQL SERVICES 搭建问题

    一.SQL SERVICES  设置IP 连接 SQL2008是没有外围配置的,为了能用IP地址或者local登陆,需要做下面的配置. 打开Microsoft SQL Server 2008 R2→配 ...

  8. SQL 拼接字符串 使用IN查询方法

    问题描述 当在 SQL SERVER 中查询的时候,同事遇到一个字段存储的字符串为用逗号分隔的主键 ID 值,格式为:1,2,3,4,这时候需要查询符合条件的所有数据,所以选择使用 IN 查询,但是直 ...

  9. linux用户和组 之 用户管理

    一. linux 用户和组的基本介绍 1.linux下 有三种用户: 1. root: 权限最大的. 2. 系统用户: UID小于1000的.系统服务管理用户,一般是不允许登录系统的.(比如mysql ...

  10. 项目四:Java秒杀系统方案优化-高性能高并发实战

    技术栈 前端:Thymeleaf.Bootstrap.JQuery 后端:SpringBoot.JSR303.MyBatis 中间件:RabbitMQ.Redis.Druid 功能模块 分布式会话,商 ...