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