有时候我们把windows下编辑好的html文件通过FTP等方式传到服务器上会发现路径明明正确,通过web访问却提示404,又或者能访问到但是看到的是乱码,原因:浏览器默认情况下,URI的编码是以UTF-8的方式编码后服务器发送的,因此在URI 中出现中文同样会以UTF-8的方式编码后发送到服务器,如系统的字符集、文件名的字符集和URI的字符集不一到处就会出现解码问题。这种方式可以通过多种方式解决:文件转码、文件名转码、系统环境、浏览器编码设置、HTTP程序设置等,这里只简单说下转码的方法。
1、文件和目录名转码
安装convmv
tar -zxvf ...
cd ...
make && make install
安装成功后会出现一个convmv命令
把windows下的文件传到linux中显示乱码
转码:GB2312 => UTF-8
convmv -r -f GB2312 -t UTF-8 --notest ./*
注:-r递归,具体使用方法使用convmv --help查询
2、文件内容转码
安装enca
tar -jxvf ...
cd ...
./configure && make && make install
#开始转码前先查看一下文件编码
[root@localhost 我的电脑]# enca `ls`
二.txt: Simplified Chinese National Standard; GB2312
我的文件.txt: Simplified Chinese National Standard; GB2312
#转码(注必须使用以下重定向方式使用)
[root@localhost 我的电脑]# iconv --from-code=GB2312 --to-code=UTF-8 二.txt > 二二.txt
#查看转码后的各文件编码
[root@localhost 我的电脑]# enca `ls`
二.txt: Simplified Chinese National Standard; GB2312
二二.txt: Universal transformation format 8 bits; UTF-8
我的文件.txt: Simplified Chinese National Standard; GB2312
#此时可以正常查看转码后生成文件的内容,原文件编码没有改变,仍无法查看
[root@localhost 我的电脑]# cat 二二.txt
真二[root@localhost 我的电脑]# cat 二.txt
t[root@localhost 我的电脑]#
3、系统环境编码
1、redhat下/etc/sysconfig/i18里面设置的语言环境调用的文件在/usr/share/i18n/locales下
2、locale -a可以查看所有能使用的环境编码
3、LC_ALL和LANG和LC_*的优先级为LC_ALL>LC_*>LANG,
另外在其它一项没有设置的情况下,还有默认值的问题。例:LANG设置为zh_CN.UTF-8,如果LC_XX没有设置,则会使用LANG的设置
LC_ALL设置后,其它设置都失效。