我知道我有什么错误,但我不知道如何决定。在我的Cocoa应用程序中遇到像Þþ, Ðð, Ææ之类的信件是可以的。
通过断点,我发现每次输入至少一个非拉丁字符时,URLWithString都会返回零。否则,只返回一些基于拉丁字符的新URL。
一些尝试的片段:
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符号。
发布于 2018-04-19 13:14:48
URLWithString只适用于有效的URL。您传递的一些字符对于URL的查询部分无效。见RFC 3986第2节。因为URL无效,所以它返回零。
如果URL中有任意字符,则不应该尝试将其全部构建为单个字符串,因为URL的每个部分都需要不同的编码。您需要使用NSURLComponents。这将自动正确地转义每个部分。
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的基本部分是静态的,并且您知道它的编码是正确的,所以可以这样做:
NSURLComponents *comp = [NSURLComponents componentsWithString:@"https://hostdomain.com/restapi/someRequest"]
comp.query = @"par1=arg1&par2=arg2&input=óðir"如果您真的想更直接地构建字符串,可以查看stringByAddingPercentEncodingWithAllowedCharacters:。查询部件使用[NSCharacterSet URLQueryAllowedCharacterSet]。
https://stackoverflow.com/questions/49919731
复制相似问题