萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> 如何讓Nginx支持中文文件名

如何讓Nginx支持中文文件名

   首先得讓你的系統有中語語言包:

  設置前可以執行:locale 看一下,如果顯示是en_US.UTF-8,即是正常,不用按下面的步驟設置。如果顯示其他編碼需要按如下步驟設置。

  CentOS

  編輯/etc/sysconfig/i18n 文件,內容修改為:(可以使用vi、nano或winscp圖形管理軟件,依個人口味選擇)

  LANG="en_US.UTF-8"

  SYSFONT="latarcyrheb-sun16"

  保存,重啟系統。

  Debian

  apt-get install -y locales

  dpkg-reconfigure locales

  執行dpkg-reconfigure locales後會出現如下對話框:

  用向下的方向鍵找到en_US.UTF-8 UTF-8,按空格選擇,再按回車鍵。

  再按向下鍵選擇en_US.UTF-8,再按回車鍵確認,重啟系統。

  Ubuntu

  編輯/etc/default/locale文件,修改內容為(沒有的話創建一個):

  LANG="en_US.UTF-8"

  LANGUAGE="en_US:en"

  保存,再執行:

  locale-gen en_US en_US.UTF-8

  重啟系統。

  執行:locale 看一下是否顯示是en_US.UTF-8,如果報錯,請在本文反饋。按以上步驟設置好後即可支持中文,可以上傳中文的文件或中文的目錄。

  在nginx.conf文件裡配置的字符集也是utf-8

  server {

  listen 80;

  server_name test.cn;

  root /data;

  index index.html index.jsp;

  charset utf-8;

  ……

  ay%PM'G+U0

  客戶端用的是secureCRT,用的字符集改為utf-8,用uft-8後再用rz上傳文件,在ie下中文可以正常顯示了。

  注意:

  如果中文文件名是gb2312的需要轉換成utf-8.(注是文件名,不是文件內容)。使用convmv轉換,(如果找不到這個命令,光盤中有這個包 convmv-1.10-1.el5.noarch.rpm)convmv -fGBK -tUTF8 -r--notesttarget

  其中-f是源編碼,-t是目標編碼,-r是遞歸處理目錄,–notest是不移動,實際上對文件進行改名(actually do rename the files),target是目標目錄。其余參數可以參考man或者-h。

  如果是在沒有更改編碼前上傳的文件,設置好後依然會是亂碼的,建議重新上傳一下文件。如果沒有原來文件的備份可以使用下面命令進行轉換:for f in `ls *.html` ; do mv $f `ls $f|iconv -f GBK -t UTF-8`; done 。

  其中*.html為要轉換的文件類型,也可以更換為*.txt,*.rar 主要是看你是什麼文件了,裡面的GBK為源文件的編碼類型,如果不知道源文件的編碼類型可以執行:file -bi 文件名 。

  如果想在Windows下改的話其實也是可以的Editplus就有批量修改文件編碼的功能,其他的軟件可能也有此類功能,可以自行研究一下。

  如果是目錄的話,目前好像是沒有辦法進行轉換。

  還有一個問題,如果是html之類的網頁文件,如果原來是網頁內容是gb2312或類似的非utf-8的編碼,先要將網頁裡面的charset 改為charset=utf-8,再轉換文件編碼,否則網頁還是會亂碼的。

  convmv 可以從http://j3e.de/linux/convmv 下載,

  wget http://j3e.de/linux/convmv/convmv-1.14.tar.gz

  tar -zxvf convmv-1.14.tar.gz

  cd convmv-1.14

  make clean;

  make install;

  如:

  ./convmv -f GB2312 -t UTF-8 -r --nosmart --notest userfiles/*.*

  以上表示 userfiles下的所有文件的文件名由GB2312轉換為UTF-8

  對於文件內容的字符集轉換可以使用iconv

copyright © 萬盛學電腦網 all rights reserved