NSURL URLWithString: является нулевым с неанглийскими символами с акцентом - PullRequest
47 голосов
/ 24 января 2010

У меня есть следующая строка ...

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

Обратите внимание, что в нем есть акцентированные символы. Когда я пытаюсь превратить это в URL-адрес, возвращаемый URL-адрес является нулевым ...

[NSURL URLWithString:googleSearchString];

Так что обычно URL работает, за исключением случаев, когда в строке есть акцентированные неанглийские символы. Любая помощь о том, как справиться с этим?

Ответы [ 5 ]

70 голосов
/ 24 января 2010

Вам нужно экранировать специальные символы, чтобы заставить его работать правильно. Что-то вроде:

[NSURL URLWithString:[googlSearchString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
7 голосов
/ 19 апреля 2016

Использование Swift 2.2

Для экранирования неанглийских символов, например: для отправки запроса URL do:

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

Здесь urlPath - это Optional, а path - ваш исходный URL (не с английскими символами)

5 голосов
/ 23 февраля 2018

Используйте это для SWIFT 4:

let url = myURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let myURL = URL(string: url)
0 голосов
/ 12 декабря 2016

В методе 2k16 stringByAddingPercentEscapesUsingEncoding: устарела, и нет способа избежать этого правильно. Если URL-адрес задан заранее, просто используйте строку в кодировке браузера, потому что метод stringByAddingPercentEncodingWithAllowedCharacters: не может экранировать весь URL-адрес.

0 голосов
/ 10 сентября 2013

Иногда пробел в URL может вызвать эту проблему.

...