【问题标题】:iOS - stringByRemovingPercentEncoding returns nil for single/double quotesiOS - stringByRemovingPercentEncoding 为单/双引号返回 nil
【发布时间】: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


【解决方案1】:

我将此标记为已解决。请看一下这些参考资料:

https://forums.developer.apple.com/thread/89706
https://discussions.apple.com/thread/8082282

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多