2013-06-05 48 views
2

我已經有2年的時間將本地HTML文件加載到webview中的iPhone應用程序。在更新它時,我遇到了文件路徑的問題。路徑中的一個元素是俄語,在_finalPath中看起來仍然很好,但是當我將它包裝在NSURL中時,西裏爾字母被轉換爲Unicode實體,從而打破了HTML文件的路徑。在NSURL中包裝一個NSString(文件路徑)會破壞Unicode嗎?

//finalPath is figured in and passed on from tenseListViewController 
//ACK - this now seems to turn брать into %D0%B1%D1%80%D0%B0%D1%82%D1%8C in the middle of the path! 
NSLog(@"-->starting showInfo: _finalPath is %@", _finalPath); 
NSURL *url = [NSURL fileURLWithPath:_finalPath]; 
NSLog(@"*url is %@", url); 

這裏的日誌中的輸出:

2013年6月5日13:51:39.409 NewTryout [29609:C07] - >起始showInfo:_finalPath是/用戶/ cford /庫/ Application Support/iPhone Simulator/6.1/Applications/8C06E53D-BFA6-4EA5-823A-0EBDBB3B51B2/NewTryout.app/verbs /брать/ imperfective/Present.html

2013-06-05 13:51:39.409 NewTryout [ 29609:c07] * url is file://localhost/Users/cford/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/8C06E53D-BFA6-4EA5-823A-0EBDBB3B51B2/NewTryout.app/verbs/ %D0%B1%D1%80%D0%B0%D1%82%D1%8C /缺陷/ Present.html

這是一個iOS5或6的變化,還是我應該看看別的我的代碼?有什麼建議麼?

回答

2

在開始的URL中不允許使用非ASCII字符(IRIs是爲了替代URL而發明的,特別是支持Unicode)。您的俄文字符正在編碼爲UTF-8八位字節,然後這些八位字節正在進行URL編碼。這是URL的正確行爲,並且在HTML鏈接中工作得很好。如果WebView在單擊鏈接時未正確打開HTML文件,則在處理URL時必須中斷WebView本身。在使用之前,它應該是URL解碼和UTF8解碼數據。如果不是,那麼這是WebView中的一個錯誤。除非WebView在單擊鏈接時僅向您提供原始URL文本,並且您正在自己打開文件,在這種情況下,您有責任在將URL數據用於其餘代碼之前對其進行解碼。

+0

謝謝雷米,這是有道理的(儘管現在我很驚訝這段代碼已經在運輸應用程序中工作了這麼久)。 WebView不會打開這些文件,因爲這些路徑具有俄語中的文件夾名稱。如果沒有解決方法,我可能只需要使用ASCII重命名這些文件夾? – Curt

+1

與WebView一起使用的URL的正確性如何?你能顯示你的實際代碼嗎? –