Javascript window.open中的UTF8字符串被UIWebview的截取者应该截获的应该是StartStartLoadWithRequest

时间:2012-08-26 15:16:00

标签: javascript objective-c utf-8 uiwebview

我的UIWebview中有一个带有JS的页面,它将一些非英文文本发送到我的Obj C代码。当我在我的Obj C代码中收到的NSlog时,会出现乱码输出。有人可以看到这里有什么问题:

JS代码:

window.open("http://nothing.com?ST=nǐ",null);

Obj C代码:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {

   NSLog([[request URL] absoluteString]);
   return YES;

}

控制台输出:

http://nothing.com?ST = N㽲79

1 个答案:

答案 0 :(得分:1)

您将字符串用作NSLog()格式。随着

NSLog(@"%@", [[request URL] absoluteString]);

您将获得预期的输出。

详细说明:ǐ的UTF-8序列为C7 90. [[request URL] absoluteString]shouldStartLoadWithRequest的内容为

  

http://nothing.com/?ST=n%C7%90

如果您将其用作格式字符串,则“%C”将替换为随机字符。

要摆脱百分比转义,请使用

NSString *url = [[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];