首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >+ (instancetype) URLWithString在尝试放置非拉丁字符时返回零

+ (instancetype) URLWithString在尝试放置非拉丁字符时返回零
EN

Stack Overflow用户
提问于 2018-04-19 11:16:00
回答 1查看 150关注 0票数 2

我知道我有什么错误,但我不知道如何决定。在我的Cocoa应用程序中遇到像Þþ, Ðð, Ææ之类的信件是可以的。

通过断点,我发现每次输入至少一个非拉丁字符时,URLWithString都会返回零。否则,只返回一些基于拉丁字符的新URL。

一些尝试的片段:

代码语言:javascript
复制
NSString *baseURLString = @"https://hostdomain.com";
NSString *pathURLString = @"/restapi/someRequest?par1=arg1&par2=arg2&input=";
NSString *fullURLString = [NSString stringWithFormat:@"%@%@móðir", baseURLString, pathURLString];
NSURL *url = [NSURL URLWithString:fullURLString]; // here I get a nil while working with non-latin characters.

我仍然在试图找到一个解决方案,但是这里关于堆栈溢出的任何决定都没有对我有帮助。任何想法都将不胜感激!我的想法是,URLWithString只适用于ASCII符号。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-19 13:14:48

URLWithString只适用于有效的URL。您传递的一些字符对于URL的查询部分无效。见RFC 3986第2节。因为URL无效,所以它返回零。

如果URL中有任意字符,则不应该尝试将其全部构建为单个字符串,因为URL的每个部分都需要不同的编码。您需要使用NSURLComponents。这将自动正确地转义每个部分。

代码语言:javascript
复制
NSURLComponents *comp = [NSURLComponents new];
comp.scheme = @"https";
comp.host = @"hostdomain.com";
comp.path = @"/restapi/someRequest";
comp.query = @"par1=arg1&par2=arg2&input=óðir";

NSURL *url = comp.url;
// https://hostdomain.com/restapi/someRequest?par1=arg1&par2=arg2&input=%C3%B3%C3%B0ir

或者,由于URL的基本部分是静态的,并且您知道它的编码是正确的,所以可以这样做:

代码语言:javascript
复制
NSURLComponents *comp = [NSURLComponents componentsWithString:@"https://hostdomain.com/restapi/someRequest"]
comp.query = @"par1=arg1&par2=arg2&input=óðir"

如果您真的想更直接地构建字符串,可以查看stringByAddingPercentEncodingWithAllowedCharacters:。查询部件使用[NSCharacterSet URLQueryAllowedCharacterSet]

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49919731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档