2010-01-23 12 views
46

tengo la siguiente cadena ...NSURL URLWithString: es nulo con caracteres acentuados no están en inglés

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

cuenta de que tiene algunos caracteres acentuados. Cuando trato de convertir eso en una URL la URL devuelto es nulo ...

[NSURL URLWithString:googleSearchString]; 

Así que normalmente las obras de URL, excepto cuando no son acentuados caracteres no ingleses en la cadena. ¿Alguna ayuda sobre cómo manejar eso?

Respuesta

68

Debe escapar de los caracteres especiales para que funcione correctamente. Algo así como:

[NSURL URLWithString:[googlSearchString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; 
+1

que funciona! Gracias por la respuesta. Acababa de encontrar la función CFURLCreateStringByAddingPercentEscapes() también, por lo que cualquiera haría el trabajo. – regulus6633

+1

Vale la pena señalar, esto definitivamente manejará sus caracteres foráneos, pero no manejará correctamente los caracteres que no sean letras, como + o /. NSString no tiene ninguna función incorporada que realmente haga la codificación URL correctamente, pero esta funciona para caracteres extendidos. – clee

+1

Pregunta: para las URL de la web ... En caso de usar NSASCIIStringEncoding o NSUTF8StringEncoding – regulus6633

-1

Algunas veces un espacio en la url puede causar este problema.

7

Usando Swift 2,2

Para escapar no ingleses caracteres, por ejemplo: para hacer una solicitud de URL hacer:

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

Aquí urlPath es un Optional y path es su url original (la que tiene caracteres no ingleses)

0

En 2k16, el método stringByAddingPercentEscapesUsingEncoding: está obsoleto y no hay forma de evitarlo correctamente. Cuando la URL está predefinida, utilice una cadena codificada en el navegador, ya que el método stringByAddingPercentEncodingWithAllowedCharacters: no puede escapar a la URL completa.

1

uso de este SWIFT 4:

let url = myURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 
let myURL = URL(string: url) 
Cuestiones relacionadas