2011-03-16 64 views
1

我正面臨着像中文和日文這樣的非ascii字符的URI編碼問題。 如果我給「隱私權政策」這樣的字符,它似乎並沒有做出正確的URI。任何指針都會有幫助。這裏是一個代碼snippURI編碼問題

String path ="c:\隱私權政策.txt"; 

File f = new File(path); 

URI uri = f.toURI(); 

System.out.println(uri); 

uri = new URI("file", null, uri.getPath(), null, null); 

System.out.println(uri); 

我在這裏錯過了什麼?謝謝你的幫助。

+1

「它似乎沒有做出正確的URI」是什麼意思? – musiKk 2011-03-16 20:48:24

回答

1

我相信你的編譯器試圖把\隱當作轉義字符。當然,這不是一種有效的逃避。

事實上,對於一個URI,對於RFC 2396的2.4.3節來說,反斜槓字符並不完全合法。

其它字符被排除,因爲網關和其他傳輸 劑已知有時修改這樣的字符,或它們 用作分隔符。

unwise  = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`" 

然而,一些系統(例如IIS)轉換成反斜槓正斜槓靜默。

我試着運行你的代碼,但遇到了一些最終導致MyEclipse崩潰的錯誤,所以這可能不是唯一的問題。

0

@ Torgamus閣下是對的。所以,我將反斜槓切換爲正斜槓。使用try和catch(由netbeans建議)的環繞聲明,然後它就起作用了。

try { 
     uri = new URI("file", null, uri.getPath(), null, null); 
    } catch (URISyntaxException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 

控制檯輸出:

run: 
file:/c:/隱私權政策.txt 
file:/c:/隱私權政策.txt 
BUILD SUCCESSFUL (total time: 0 seconds) 
+0

@ Tordamus和Roger,感謝您的幫助。我只是嘗試了字符標題,並且我再次在URI中獲得一些新字符,即使使用反斜槓。 (在這種情況下,我得到了%C2%A0)我檢出了字節值本身是錯誤的。任何想法 ?? – mark 2011-03-16 21:30:43

0

的問題是,基於該溶液上用手除去「/」或「\」或「文件」是不是普遍的。 Here是與機器無關的解決方案