nginx下没法访问中文文件名的解决方法

今天在网上寻找关于Nginx访问中文目录及文件名的解决方法,偶然看到qwqg的一篇文章!
解决问题的思路很清晰,特转载过来与你们一块儿分享!该方法尚未亲自测试,因此不太肯定是否真有用! php

方法一: html

搞了大半天nginx下没法访问中文文件名的问题,如今看来是secureCRT的问题?
看来仍是字符集的问题了。
看来nginx不须要象apache那样要单独加载支持中文模块。 nginx

服务器端字符集以下
[root@test]# locale
LANG=en_US.UTF-8
LC_CTYPE=”en_US.UTF-8″
LC_NUMERIC=”en_US.UTF-8″
LC_TIME=”en_US.UTF-8″
LC_COLLATE=”en_US.UTF-8″
LC_MONETARY=”en_US.UTF-8″
LC_MESSAGES=”en_US.UTF-8″
LC_PAPER=”en_US.UTF-8″
LC_NAME=”en_US.UTF-8″
LC_ADDRESS=”en_US.UTF-8″
LC_TELEPHONE=”en_US.UTF-8″
LC_MEASUREMENT=”en_US.UTF-8″
LC_IDENTIFICATION=”en_US.UTF-8″
LC_ALL= apache

在nginx.conf文件里配置的字符集也是utf-8
server {
listen 80;
server_name test.cn;
root /data;
index index.html index.jsp;
charset utf-8; windows

客户端用的是secureCRT,字符集用的是defalut,用rz上传后在服务器上用ls显示乱码,用ie怎么浏览都不能正常看到。
找朋友测试了一下他那边的nginx,中文显示竟然一切正常,后来他告诉我他的secrueCRT用的字符集是utf-8,我改用uft-8后再用rz上传文件,在ie下中文能够正常显示了。 后端

方法二: 服务器

一:肯定你的系统是UTF编码 jsp

[root@Tserver ~]# env|grep LANG
LANG=en_US.UTF-8 工具

二:NGINX配置文件里设置为 测试

server
{
   listen       80;
   server_name  .inginx.com ;
   index index.html index.htm index.php;
   root  /usr/local/nginx/html/inginx.com;
   charset utf-8;
   }

三:若是使用putty

windows  --> translation -->UTF-8

mkdir NGINX中文技术站
echo NGINX中文技术站 > 中国.html

四,若是是用securecrt 上传文件,请选择 回话-->外观--UTF-8

五,若是出现文件名乱码显示

执行
for f in `ls *.html` ; do mv $f `ls $f|iconv -f GBK -t UTF-8`; done

另外一位朋友的解决方案是:

我如今用的方法是
在后端个别目录用APACHE代理了 。。
APACHE支持中文码。。

location /~doc/ {
   proxy_pass http://127.0.0.1:81/;#apache server
}

以上供你们参考!



================Linux下两个工具convmv和iconv===========


convmv就是更改文件名编码方式的一个工具。好比

sudo convmv -f gbk -t utf-8 -r –notest  /home

就是将/home目录下原来文件名是gbk编码方式的所有改成utf-8格式的。这里 -f  后面为原来的编码方式,-t 后面是要更改成的编码方式, -r 表示这个目录下面的全部文件, –notest 表示立刻执行,而不是仅仅测试而已。另外这命令好像要root才能执行,所以要加上 sudo。

iconv是更改文件编码方式的一个工具:

sudo iconv -f gbk -t utf-8 -o outfile  infile

-f为原来的编码方式,-t 为输出文件的编码方式, -o表示输出文件名,这利用outfile表示,最后跟上要更改编码方式的文件名sourcefile  。

经过这两个工具,中文文件乱码的问题终于解决。

相关文章
相关标签/搜索