Samba和FTP中文乱码的解决方法
1、参考资料
http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html
http://blog.csdn.net/zzjjian333/article/details/8203443
http://linux.die.net/man/3/setlocale
Windows操作系统上,创建中文名称的文件或文件夹; 再将该U盘插到Linux服务器上;然后通过Samba/FTP访问该U盘,则会出现中文乱码。示例[1]: 中国大陆Windows操作系统的编码格式为GBK,而Samba/FTP服务的编码格式为UTF-8;如果U盘插到
3、服务器或PC操作系统的编码格式
(1) Linux服务器的编码格式: Debian OS
a. 查看当前Debian系统的编码格式:
# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
b. 以上是Debian默认的编码格式: C 或 POSIX
b1. 参考资料 http://linux.die.net/man/3/setlocale 官方的说明: The locale "C""" or "POSIX""" is a portable locale; its LC_CTYPE part corresponds to the 7-bit ASCII character set.
b2. C 或 POSIX 的LC_CTYPE是ASCII的编码格式。
c. 修改Debian的编码格式:
c1. export 修改LC_ALL,该方式只能在当前的终端生效
debian:~# export LC_ALL=zh_CN.GBK
debian:~# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.GBK"
LC_NUMERIC="zh_CN.GBK"
LC_TIME="zh_CN.GBK"
LC_COLLATE="zh_CN.GBK"
LC_MONETARY="zh_CN.GBK"
LC_MESSAGES="zh_CN.GBK"
LC_PAPER="zh_CN.GBK"
LC_NAME="zh_CN.GBK"
LC_ADDRESS="zh_CN.GBK"
LC_TELEPHONE="zh_CN.GBK"
LC_MEASUREMENT="zh_CN.GBK"
LC_IDENTIFICATION="zh_CN.GBK"
LC_ALL=zh_CN.GBK
c2. 手动增加locale,只要把新的locale增加到/etc/locale.gen文件中,再运行locale-gen命令即可生成新的locale。再通过设置上面介绍的LC_*变量就可设置系统的locale了。下面是一个locale.gen文件的样例。
# This file lists locales that you wish to have built. You can find a list
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
# this file, you need to rerun locale-gen.
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
c3. 如果要使得系统启动就设置成所需要的编码格式,需要将export的设置写入到/etc/profile文件中。
(2) Windows 操作系统的编码格式: WindowsXP/Windows7+
a. 查看当前Windows系统的编码格式
# 在 DOS 命令行环境下输入如下命令,即可查看当前Windows系统的编码格式
> chcp
活动的代码页: 936
b. 以上显示结果表示Windows系统编码格式为CP936,即GBK。参考资料 http://blog.csdn.net/zzjjian333/article/details/8203443 有详细的说明。
c. Windows操作系统的编码格式不建议修改,如果修改,很可能造成用户原来硬盘中的中文出现乱码。
4、Samba的编码格式
(1) Samba编码格式的设定:
a. Samba的主配置文件/etc/samba/smb.conf如下选项用于设定编码格式:
dos charset = UTF-8
unix charset = utf-8
display charset = utf-8
b. 当前Samba的编码格式为UTF-8
c. 测试确认当前Samba访问U盘会出现中文乱码: 详见下图1所示
(2) 设定合适的编码格式,解决中文乱码
a. 产生系统支持的字符集: zh_CN.GB18030 zh_CN GB2312 zh_CN.UTF-8 UTF-8 zh_TW BIG5 zh_TW.UTF-8 UTF-8
a1. 修改文件: /etc/locale.gen
a2. 运行命令: locale-gen # 产生系统支持的字符集
b. 修改samba的主配置文件/etc/samba/smb.conf [ 设置合适的编码格式 ]
dos charset = CP936
unix charset = GB18030
display charset = GB18030
c. GB18030 字符集兼容 GBK,且收录的中文字符更多,推荐使用GB18030
d. 重启 Samba 服务: service samba restart
e. 测试确认当前Samba访问U盘会不会出现中文乱码: 详见下图2所示
图2 Samba访问USB中文正常
5、FTP的编码格式
(1) FTP编码格式的设定: proftp
a. proftp的主配置文件/etc/proftpd/proftpd.conf如下选项用于设定编码格式:
UseEncoding UTF-8 UTF-8
# 第一个UTF-8设置服务器端的编码格式;
# 第二个UTF-8设置FTP客户端的编码格式
b. 当前proftp的编码格式为UTF-8
c. 参照Samba的修改方式,将/etc/proftpd/proftpd.conf如下选项修改为:
UseEncoding UTF-8 GB18030
或 UseEncoding UTF-8 CP936
d. 重启proftp后,测试确认当前proftp访问U盘不会出现中文乱码: 详见下图3所示
图3 FTP访问USB中文正常