中文路徑問題,中文url

2021-04-12 11:46:42 字數 2725 閱讀 4252

在使用railswebrick過程中碰到中文url問題,原本認為很簡單事情其實並不簡單。為了了解中文路徑問題,特別在apache,iis下面做了試驗。過程如下:

首先要準備好gb2312和utf-8檔名。這裡使用python來獲得。

>>> s_gb='我.txt'

>>> print s_gb

我.txt

>>> s_gb

'/xce/xd2.txt'

>>> s_unicode = s_gb.decode('gb2312')

>>> s_unicode

u'/u6211.txt'

>>> s_utf8 = s_unicode.encode('utf-8')

>>> s_utf8

'/xe6/x88/x91.txt'

>>> rs_gb=r'/xce/xd2.txt'

>>> rs_gb

'//xce//xd2.txt'

>>> rs_gb.replace('//x','%')

'%ce%d2.txt'

>>> rs_utf8 = r'/xe6/x88/x91.txt'

>>> rs_utf8.replace("//x","%")

'%e6%88%91.txt'

好了,到此為止已經獲得了"我.txt"用不同編碼encode之後名稱,分別是'%ce%d2.txt'(gb2312)和'%e6%88%91.txt'(utf-8)。

現在將'我.txt'放置到web伺服器上去,比如說是web根目錄下面。然後分別通過http://localhost/%ce%d2.txt和http://localhost/%e6%88%91.txt去訪問。

一、iis伺服器。

兩種方法都可以訪問。由此可見iis伺服器具有某種識別機制,做出正確選擇。

二、apache伺服器

用utf-8編碼可以訪問,用gb2312不可以訪問。這個結果出乎我意料,毫無疑問檔案系統上"我.txt"名稱是以gb2312編碼,反而用utf-8可以訪問?也許apache為了適應各種各樣平台,而有它特殊考慮。這個apache伺服器只是在我windows2000伺服器上測試,沒有在linux獲其它系統下測試,不過要測試也很簡單。

三、railswebrick

webrick就很簡單了,你必須和檔案系統上檔名編碼一致。用下面python**可以在檔案系統上建立乙個以utf-8編碼檔名'她.txt',當然如果你用windows資源管理器去檢視話會是亂碼。

>>> s='她.txt'

>>> su=s.decode('gb2312').encode('utf-8')

>>> su

'/xe5/xa5/xb9/xe7/x9a/x84.txt'

>>> f = open("c:///xe5/xa5/xb9/xe7/x9a/x84.txt",'w')

>>> f.write('abc')

>>> f.close()

然後將這個檔案放置到webrick根目錄下面,通過http://localhost/%e5%a5%b9%e7%9a%84.txt就可以訪問。

這個例子當中需要注意是,作業系統不總是允許你用不同編碼用作檔名,比如你用'她.txt'就不行。

通過這些測試之後,應該知道只有將中文檔名檔案在iis下面,才能保證任何情況下都能正常訪問。

這裡任何情況包括:

通過您自己站點

別人將連線放在別人**上。

第一種情況下,三種伺服器都可以做到。比如,對於apache伺服器,只要將有中文連線頁面都設定成utf-8編碼,而檔案系統上檔名是gb2312編碼即可。而對於webrick,只要將頁面設定成gb2312,檔案系統名也是gb2312即可。真嗎?其實有例外,比如用ie來訪問,並且ie設定成總是以utf-8傳送話。但是webrick可以將頁面設定成utf-8,然後將檔名也設定成utf-8即可。但這前提是檔案系統必須是utf-8編碼檔名,比如novellsles(這個我知道,其它不知道)等。

在第二種情況下,你無法控制別人**用什麼編碼顯示,所以iis是唯一選擇。

url中文編碼問題

1.url該編碼的編碼一定要編碼,否則如果存在空格就會報400錯誤,那麼什麼樣的url是該編碼的呢?url中有空格等特殊字元的 url中有中文的2.編碼要只對引數編碼,不要對整個url進行編碼,因為如果對整個url編碼的話會把url中的 等字元也進行編碼了 3.使用urlencoder.encode...

php中文路徑問題

所有面頁,包括空白的都會報類似下面的錯誤。warning unknown failed to open stream no such file or directory in unknown on line 0 fatal error unknown failed opening required ...

Python 中文路徑問題

python中檔案路徑的問題 慎用中文路徑!慎重中文路徑!慎用中文路徑!使用斜槓 c test.txt 不用反斜槓就沒法產生歧義了 將反斜槓符號轉義 c test.txt 因為反斜槓是轉義符,所以兩個 就表示乙個反斜槓符號 使用python的raw string r c test.txt pytho...