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  。

經過這兩個工具,中文文件亂碼的問題終於解決。

相關文章
相關標籤/搜索