中文附件無法下載的問題分析
更新時間:2008年12月11日 20:07:56 作者:
問題:網站上傳的中文名附件無法下載
環(huán)境:win2000/xp 即IIS5.x會出現 win2003 IIS6.0正常
詳情:當點擊附件后,瀏覽器地址欄已經出現了正確路徑(*/測試一下.doc,經測試迅雷亦可下載下來),但并沒有出現預期的打開/下載對話框,而顯示“無法顯示網頁”。但有一個doc文件文件卻可以。經過比對,唯一的區(qū)別在于能下的文件的文件名是11個漢字,而其他的幾個分別是8個或10個漢字,即偶數就會出錯,真是長見識呀。
百度了一下,搜到如下文章。
在網上經常會看到有人問這樣的問題:“我的文件名是中文的,放到Web服務器上讓別人下載,卻總是提示找不到文件,不過文件明明在那里呀?”。這種問題說到底就是編碼的問題,什么UTF8、GBK、BIG5,一看就頭疼。
對于這種問題,網上也有人提出了好多解決辦法,比如對請求的文件名編碼,或者把IE->工具--〉選項--〉高級 最下邊的始終以UTF8編碼發(fā)送的勾去掉,也就是不用UTF8編碼發(fā)送URL,不過因為IE是默認的以UTF編碼發(fā)送,所以就要每個人都改IE設置。
出現這種問題的大致原因就是:IE把URL中的中文以UTF8編碼--->Web服務器接到URL之后,要進行解碼,不同的WEB服務器解碼規(guī)則也是不同的,不過一般都是以默認的字符集來解碼,比如中文系統(tǒng)一般都是GBK吧,這樣解出來的編碼自然就是錯的。
我的機器環(huán)境是:win2000中文+IIS5 ,下面我們來做個實驗
一、在web根目錄下新建一個文件,文件名為 "慈勤強.txt",內容為慈勤強。我們通過網頁訪問http://127.0.0.1/慈勤強.txt, 發(fā)現這個沒問題,能夠正常顯示文件內容。
二、我們再建一個文件 "勤強.txt",內容為勤強。我們通過網頁訪問http://127.0.0.1/勤強.txt ,結果發(fā)現,無法找到網頁。
三、我們再建一個文件 "鍕ゅ己.txt" ,內容為 “亂碼”。我們通過網頁訪問http://127.0.0.1/鍕ゅ己.txt ,發(fā)現這個也沒有問題,可以正常顯示。
四、這時,我們再訪問一下http://127.0.0.1/勤強.txt ,結果發(fā)現又可以訪問了,但是很遺憾,出現的內容并不是我們希望的“勤強”,而是"亂碼",也就是"鍕ゅ己.txt"文件的內容。
至此,大家應該可以明白一點了,就是"勤強"經過UTF8編碼以后,IIS再用GBK解碼,就解碼成了"鍕ゅ己"。關于編碼是挺繁瑣的一件事情,在這里就不深入的分析了,大家只要知道UTF8編碼,對于中文會編碼成3個字節(jié),而Unicode\GBK都是兩個字節(jié)的. 比如 勤強 兩個字經過UTF8編碼以后變成了 %E5%8B%A4%E5%BC%BA ,一共6個字節(jié)了,%E5%8B%A4 是勤%E5%BC%BA 是強。
IIS解碼則是按照兩個字節(jié)一個漢字的方式來解碼,也就是會把 %E5%8B 按照gbk解碼成一個字, %A4%E5 一個%BC%BA 代表一個字。 我們可以去查GBK編碼表,發(fā)現 E58B 是鍕, A4E5是ゅ,BCBA是己。
所以,對于IIS來說,如果非要用中文文件名的話, 中文的字數就應該是奇數的,就應該不會有問題(我這臺機器得出的結論,可能不適合別的),比如 詞.txt 茨此次.txt 都可以正常顯示,偶數的就會出問題了,比如"我們都是小孩.txt"。對于其他的Web 服務器,比如apache之類的,可能就不是這個樣子的了,具體也不清楚。
百度了一下,搜到如下文章。
在網上經常會看到有人問這樣的問題:“我的文件名是中文的,放到Web服務器上讓別人下載,卻總是提示找不到文件,不過文件明明在那里呀?”。這種問題說到底就是編碼的問題,什么UTF8、GBK、BIG5,一看就頭疼。
對于這種問題,網上也有人提出了好多解決辦法,比如對請求的文件名編碼,或者把IE->工具--〉選項--〉高級 最下邊的始終以UTF8編碼發(fā)送的勾去掉,也就是不用UTF8編碼發(fā)送URL,不過因為IE是默認的以UTF編碼發(fā)送,所以就要每個人都改IE設置。
出現這種問題的大致原因就是:IE把URL中的中文以UTF8編碼--->Web服務器接到URL之后,要進行解碼,不同的WEB服務器解碼規(guī)則也是不同的,不過一般都是以默認的字符集來解碼,比如中文系統(tǒng)一般都是GBK吧,這樣解出來的編碼自然就是錯的。
我的機器環(huán)境是:win2000中文+IIS5 ,下面我們來做個實驗
一、在web根目錄下新建一個文件,文件名為 "慈勤強.txt",內容為慈勤強。我們通過網頁訪問http://127.0.0.1/慈勤強.txt, 發(fā)現這個沒問題,能夠正常顯示文件內容。
二、我們再建一個文件 "勤強.txt",內容為勤強。我們通過網頁訪問http://127.0.0.1/勤強.txt ,結果發(fā)現,無法找到網頁。
三、我們再建一個文件 "鍕ゅ己.txt" ,內容為 “亂碼”。我們通過網頁訪問http://127.0.0.1/鍕ゅ己.txt ,發(fā)現這個也沒有問題,可以正常顯示。
四、這時,我們再訪問一下http://127.0.0.1/勤強.txt ,結果發(fā)現又可以訪問了,但是很遺憾,出現的內容并不是我們希望的“勤強”,而是"亂碼",也就是"鍕ゅ己.txt"文件的內容。
至此,大家應該可以明白一點了,就是"勤強"經過UTF8編碼以后,IIS再用GBK解碼,就解碼成了"鍕ゅ己"。關于編碼是挺繁瑣的一件事情,在這里就不深入的分析了,大家只要知道UTF8編碼,對于中文會編碼成3個字節(jié),而Unicode\GBK都是兩個字節(jié)的. 比如 勤強 兩個字經過UTF8編碼以后變成了 %E5%8B%A4%E5%BC%BA ,一共6個字節(jié)了,%E5%8B%A4 是勤%E5%BC%BA 是強。
IIS解碼則是按照兩個字節(jié)一個漢字的方式來解碼,也就是會把 %E5%8B 按照gbk解碼成一個字, %A4%E5 一個%BC%BA 代表一個字。 我們可以去查GBK編碼表,發(fā)現 E58B 是鍕, A4E5是ゅ,BCBA是己。
所以,對于IIS來說,如果非要用中文文件名的話, 中文的字數就應該是奇數的,就應該不會有問題(我這臺機器得出的結論,可能不適合別的),比如 詞.txt 茨此次.txt 都可以正常顯示,偶數的就會出問題了,比如"我們都是小孩.txt"。對于其他的Web 服務器,比如apache之類的,可能就不是這個樣子的了,具體也不清楚。
相關文章
給blog添加效果(計數器、天氣預報、精美flash時鐘、跟隨鼠標的螢火蟲、跟隨鼠標的文字、狀態(tài)欄文本、副標
給blog添加效果(計數器、天氣預報、精美flash時鐘、跟隨鼠標的螢火蟲、跟隨鼠標的文字、狀態(tài)欄文本、副標...2007-02-02