Samba编码设置方法

弟管理學校的網頁伺服器,該伺服器也同時是大家的分享檔案集散中心,是以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 呢?
不同的環境得要考量到語系與軟體之間編碼的相關問題喔!

时间: 2024-11-05 00:40:50

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

MySQL编码设置方法 MySQL编码为utf8设置方法

mysql的默认编码是拉丁,我每次JSP制作网页用insert语句插入数据库时汉字都会显示成问号,安装mysql后,启动服务并登陆,使用show variables命令可查看mysql数据库的默认编码: 由上图可见database和server的字符集使用了latin1编码方式,不支持中文,即存储中文时会出现乱码.以下是命令行修改为utf-8编码的过程,以支持中文. (1)关闭mysql服务 [plain] view plaincopy service mysql stop (2)修改 /etc

MySQL编码设置方法

一.设置创建数据库时数据库所使用的编码方式 CREATE {DATABASE|SHECMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name 我们默认[ ]里面的内容是可选的,也就是说可写可不写的.还可以选择编码方式,如 [DEFAULT] CHARACTER SET [=] charset_name 经过这样的设置之后呢,我们数据库中所使用的编码就是gb2312了,当然你也可以设置其他的编码方式,主要更改char

asp.net 页面编码 设置的几种方法

1如果要为整个项目设置页面编码,那么就可以在 Web.config 文件中添加一个 Globalization 属性,然后设置它的 fileEncoding.requestEncoding,和 responseEncoding 特性: <configuration>    <system.web>            <globalization requestEncoding="utf-8" responseEncoding="utf-8&q

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

Linux下将UTF8编码批量转换成GB2312编码的方法 在sqlplus中导入UTF8编码的sql脚本就会出现乱码错误,这时就需要将UTF8编码转换成GB2312编码,下面为大家介绍下在Linux下如何进行转换 UTF8编码和GB2312编码是有区别的,在sqlplus中导入UTF8编码的sql脚本就会出现乱码错误,这时就需要将UTF8编码转换 成GB2312编码,可是一个个的转换十分麻烦,下面小编就教你如何在Linux下将UTF8编码批量转换成GB2312编码. 背景 本人在使用oracl

使用多字节字符集的跨平台(PC、Android、IOS、WP)编码/解码方法

随着移动端的发展,跨平台已成为通讯架构设计的重要考虑因素,PC.Android.IOS.WP等跨多平台间的数据通讯,必然要解决字符编码/解码的问题. 多字节字符集MBCS不是跨平台的首选字符集,面向跨平台.国际化的推荐字符集肯定是UNICODE. 写VC的人都知道,在以前VC++6.0中默认的字符集是多字节字符集,而VS2005及以后默认的字符集是Unicode,VS2013中默认不再对多字节字符串进行支持. 但对很多较早的服务端项目,依然使用的是多字节字符集,不过使用多字节字符集依然可以实现跨

mysql的安装、C++访问mysql数据库、编码设置问题

一.mysql的安装,这个相对简单,直接去官网下载mysql安装程序,就可以完成安装过程,网上有很多安装教程,这个没什么注意事项. 二.C++访问mysql,主要是用到mysql定义的头文件,内部定义了各种数据结构和函数,比如MYSQL,MYSQL_RES,MYSQL_ROW,mysql_real_connect等等一系列的结构和函数.这里要注意的就是将头文件及lib文件以及dll文件配置到当前开发环境来进行访问mysql数据库. 以最新的vs2013作为示例说一下配置过程.为了写的清晰点,在网

spring字符编码设置

<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter   </filter-class>   <init-param> <param-name>encoding</param-name> <param-value>U

MyEclipse编码设置,中文乱码解决,UTF-8,GBK

我们使用MyEclipse或者Eclipse的时候经常容易遇到中文乱码问题,接下来我们就从Eclipse软件的工作空间.代码本身.控制台及服务器的代码设置做简单介绍. 一.MyEclipse工作空间编码. window-->preferences-->general-->workspace 在右侧 Text file encoding ->Other    选择UTF-8 二.MyEclipse的编辑文件(jsp/html 等)默认的编码设置,也就是文件保存的格式. 在不对MyEc

vim编码设置(转)

vim里面的编码主要跟三个参数有关:enc(encoding).fenc(fileencoding).fence(fileencodings) fenc是当前文件的编码,也就是说,一个在vim里面已经正确显示了的文件(前提是你的系统环境跟你的enc设置匹配),你可以通过改变fenc后再w来将此文件保存成不同的编码.比如说,我:set fenc=utf-8,然后:w,就把文件保存成utf-8的了,:set fenc=gb18030,再:w,就把文件保存成gb18030的了.这个值对于打开文件的时候