NSURL URLWithString:为非英语重音字符

reg*_*633 48 cocoa nsurl special-characters

我有以下字符串......

NSString *googleSearchString = @"http://www.google.com/search?q=lyrics+%22Tænder+På+Dig%22+%22Jakob+Sveistrup%22";
Run Code Online (Sandbox Code Playgroud)

请注意,它有一些重音字符.当我尝试将其转换为url时,返回的url为null ...

[NSURL URLWithString:googleSearchString];
Run Code Online (Sandbox Code Playgroud)

所以通常url工作,除非字符串中有重音非英语字符.有关如何处理的任何帮助?

cle*_*lee 70

您需要转义特殊字符才能使其正常工作.就像是:

[NSURL URLWithString:[googlSearchString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
Run Code Online (Sandbox Code Playgroud)

  • 使用`NSUTF8StringEncoding`.编码确定转义百分比将描述的字节数.**如果您使用ASCII,则无法保证重音字符能够存活,或者如果它们存在,则以任何特定编码**进行编码,因为这些字符不是ASCII格式.此外,如果任何字符都不是Cocoa给你的任何编码(例如几乎任何亚洲语言中的任何东西),该方法仍将返回`nil`. (8认同)

Hug*_*nso 7

使用Swift 2.2

对于转义非英语字符,例如:发出URL请求:

let urlPath = path.URLString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())

urlPath是一个Optionalpath你的原始网址(非英文字符)


Mak*_*zev 5

将此用于SWIFT 4:

let url = myURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let myURL = URL(string: url)
Run Code Online (Sandbox Code Playgroud)