在NSURL中包装NSString(文件路径)会破坏Unicode吗?

时间:2013-06-05 18:16:47

标签: ios url unicode encoding

我在商店里有一个iPhone应用程序已经有2年了,它将本地HTML文件加载到webview中。在更新它时,我遇到了文件路径的问题。路径中的一个元素是俄语,在_finalPath中看起来仍然很好,但是当我将它包装在NSURL中时,西里尔字母转换为Unicode实体,打破了HTML文件的路径。

//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-06-05 13:51:39.409 NewTryout [29609:c07] - >启动showInfo:_finalPath是/ Users / cford / Library / Application Support / iPhone Simulator / 6.1 / Applications / 8C06E53D-BFA6-4EA5 -823A-0EBDBB3B51B2 / NewTryout.app /动词/брать/未完成体/ Present.html

     

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

这是iOS5或6中的更改,还是我应该在代码中查看其他内容?有什么建议吗?

1 个答案:

答案 0 :(得分:2)

在URL中根本不允许使用非ASCII字符(IRI是为替换URL而发明的,特别是为了支持Unicode)。您的俄语字符被编码为UTF-8八位字节,然后这些八位字节正在进行URL编码。这是URL的正确行为,并且在HTML链接中工作得很好。如果在单击链接时WebView未正确打开HTML文件,则在处理URL时必须断开WebView本身。在使用它之前,它应该是URL解码和UTF8解码数据。如果不是,那么这就是WebView中的一个错误。除非WebView仅在单击链接时为您提供原始URL文本,并且您自己打开文件,在这种情况下,您有责任解码URL数据,然后在其余代码中使用它。