Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSURLComponents中的URL查询项为nill_Ios_Objective C - Fatal编程技术网

Ios NSURLComponents中的URL查询项为nill

Ios NSURLComponents中的URL查询项为nill,ios,objective-c,Ios,Objective C,我正在创建一个NSURLURL,它将包含一些转义字符(日语) //url是mbos.help.jp%2Fsearch%3Fq=%E5%B0%82%E9%96%80&pg=1 当我创建NSURLComponents并尝试获取查询项时,它给了我零 NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url resolvin

我正在创建一个
NSURL
URL,它将包含一些转义字符(日语)

//url是mbos.help.jp%2Fsearch%3Fq=%E5%B0%82%E9%96%80&pg=1

当我创建
NSURLComponents
并尝试获取查询项时,它给了我零

NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url
                                                resolvingAgainstBaseURL:YES];
NSArray *queryItems = urlComponents.queryItems;
//这里是queryItems的问题


如果任何人有解决方案来获取查询项,请提供帮助。提前感谢

至少一个字符専門 您在搜索字符串中使用的无效Unicode格式为未配对UTF-16代理字符,因此不能通过
string编码,方法是添加PercentEncoding with AllowedCharacters:
,因此返回
nil

您可以在中找到一个示例。
显然,如果可以进行编码,您必须检查日语字符。

我必须说,我也没想到

至少一个字符専門 您在搜索字符串中使用的无效Unicode格式为未配对UTF-16代理字符,因此不能通过
string编码,方法是添加PercentEncoding with AllowedCharacters:
,因此返回
nil

您可以在中找到一个示例。
显然,如果可以进行编码,您必须检查日语字符。

我必须说,我也没想到

问题不在于Unicode字符,每当您添加编码时,请为我的案例使用适当的字符集。我使用的是以下集合
URLHostAllowedCharacterSet
,这意味着您的
NSURLComponents
仅为主机提供编码,要获得正确的
queryItems
请像这样使用
URLQueryAllowedCharacterSet

NSString* currentlocationbarString = @"mbos.help.jp/search?q=専門&pg=1"
NSString *escapedString = [currentlocationbarString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL* url = [NSURL URLWithString:escapedString];
现在你可以得到查询项了

NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url
                                            resolvingAgainstBaseURL:YES];
NSArray *queryItems = urlComponents.queryItems;

问题不在于Unicode字符,每当您添加编码时,请针对我的情况使用适当的字符集。我使用的是以下集合
URLHostAllowedCharacterSet
,这意味着您的
NSURLComponents
仅为主机提供编码,以获得正确的
queryItems
使用
URLQueryAllowedCharacterSet

NSString* currentlocationbarString = @"mbos.help.jp/search?q=専門&pg=1"
NSString *escapedString = [currentlocationbarString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL* url = [NSURL URLWithString:escapedString];
现在你可以得到查询项了

NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url
                                            resolvingAgainstBaseURL:YES];
NSArray *queryItems = urlComponents.queryItems;

字符是有效的,可能您可以尝试使用其他字符。我没有说字符是无效的Unicode,我说它没有成对的UTF-16字符。在这种情况下,编码是不可能的。请查收。它说U+10FFFF是UTF-16可编码的最高代码点,也是Unicode字符集6.0的最高代码点。{U+DBFF,U+DFFF}代理项对是最后一个可用的对。字符有效,可能您可以尝试使用其他字符。我没有说字符是无效的Unicode,我说它没有成对的UTF-16字符。在这种情况下,编码是不可能的。请查收。它说U+10FFFF是UTF-16可编码的最高代码点,也是Unicode字符集6.0的最高代码点。{U+DBFF,U+DFFF}代理项对是最后一个可用的对。