【发布时间】:2018-11-15 05:19:39
【问题描述】:
我有一个来自 UIWebView 委托 (shouldStartLoadRequest) 的 URLRequest,我将其转换为 NSData 对象。之后,我将它转换为一个 NSString,你有这样的东西:
test%22%3A%22Whats+going+on%22%7D%7D%2C%7B%22
当然,现在我需要摆脱所有这些百分比序列。我的问题似乎是,如果我正在处理单引号(%92)或双引号(%94),则 stringByRemovingPercentEncoding 方法返回 nil。对于 $、^、&、(、)、*、# 等其他特殊字符,情况似乎并非如此。
这里是示例代码:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSData *data = request.HTTPBody;
NSString* myString=[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
myString = [[myString stringByReplacingOccurrencesOfString:@"+" withString:@" "]stringByRemovingPercentEncoding];
}
那么这里的单引号和双引号是怎么回事?我应该怎么做才能防止这个方法返回nil??
【问题讨论】:
-
你确定你从
data得到那个字符串吗?使用NSString *myString = @"test%22%3A%22Whats+going+on%22%7D%7D%2C%7B%22";进行快速测试,然后运行你的下一条语句给我一个test":"Whats going on"}},{"字符串 -
是的,我只是给了你我得到的所有东西的一个子集作为一个例子,并用单引号/双引号解释我的问题
-
好吧,既然您提供的示例 确实 有效,我想您需要提供一个 无效的示例 努力寻求帮助...
-
OK - 百分比编码只上升到
%7F...所以任何大于此的值 - 例如%92或%94- 都是“无效编码”,因此方法返回无。 -
啊...我刚刚查看了您发布的 w3schools 链接。您正在查看的双引号字符是“结束大引号”......并且该页面上的
%94值位于Windows-1252列下。如果您在字符串中使用来自UTF-8列%E2%80%9D的值,则stringByRemovingPercentEncoding将 返回(被解码为)具有该字符的有效字符串。而%E2%80%99将返回(被解码为)“Closing / Curly Single Quote”字符。我无法告诉你为什么 web 视图/javascript 没有正确编码。
标签: ios uiwebview nsstring nsdata urlencode