Objective-C NSURL具有非字母字符

Ale*_*ier 1 xcode objective-c nsurl non-ascii-characters ios

我正在尝试使用特殊字符创建一个NSURL,如"","|"," - ",":"等.如果我的字符串中有任何这些字符,则NSURL不会初始化.如何使用这些字符创建NSURL?以下不起作用:

NSURL *url = [[NSURL alloc] initWithString:@"http://google.com?id=|test|"]; //if i remove the | it works. 
Run Code Online (Sandbox Code Playgroud)

Oza*_*ray 8

问题描述

来自[NSURL initWithString]的文档

使用提供的URL字符串初始化NSURL对象.

- (id)initWithString:(NSString*)URLString

参数 - URLString

用于初始化NSURL对象的URL字符串.此URL字符串必须符合RFC 2396中所述的URL格式,且不得为零.该方法根据RFC 1738和1808解析URLString.

回报价值

使用URLString初始化的NSURL对象.如果URL字符串格式错误,则返回nil.

讨论

此方法要求URLString仅包含正确形成的URL中允许的字符.所有其他字符必须正确转义百分比.使用UTF-8编码解释任何百分比转义字符.

您需要先将字符串编码为url.其中一个解决方案是使用 [NSString stringByAddingPercentEscapesUsingEncoding:] [1]

关于将字符串编码为url的Stackoverflow还有其他讨论:

  1. iOS:如何进行正确的URL编码?
  2. 如何对字符串进行URL编码