error NSURLErrorBadURL
-
21-09-2019 - |
Pregunta
Mi aplicación para el iPhone llamada búsqueda local de Google (versión no javascript) a comportarse algunos negocios de búsqueda.
A continuación se muestra el código para formar una url:
NSString *url = [NSString stringWithFormat:@"http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q=%@", keyword];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"GET"];
//get response
NSHTTPURLResponse* urlResponse = nil;
NSError *error = [[[NSError alloc] init] autorelease];
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
Cuando la palabra clave se refiere a caracteres ingleses, que funciona bien, pero cuando se refiere a los caracteres chinos (codificado en UTF-8, como '天安门' cuyo código UTF-8 es 'e5a4a9 e5ae89 e997a8'), informará de error NSURLErrorBadURL (-1000 , devuelve cuando una URL es incorrecto suficiente como para que una petición de URL no puede ser iniciado). ¿Por qué?
Luego llevar a cabo más investigaciones, utilizo Safari y escriba la siguiente URL: http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q= 天安门
También funciona, y la salida que recibí de Macsniffer es: /ajax/services/search/local?v=1.0&q=%E5%A4%A9%E5%AE%89%E9%97%A8
Así que escribir una dirección URL de pruebas directamente en mi aplicación
NSString *url = [NSString stringWithFormat:@"http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q=%E5%A4%A9%E5%AE%89%E9%97%A8"];
Y lo que me dieron desde el Macsniffer es alguna otra cosa: /ajax/services/search/local?v=1.0&q=1.687891E-28750X1.417C0001416CP-102640X1.4CC2D04648FBP-9999-1.989891E+0050X1.20DC00184CC67P-953E8E99A8
Parece que mi palabra clave "% E5% A4% A9% E5% AE% 89% E9% 97% A8" se tradujo en otra cosa. Entonces, ¿cómo puedo formar una URL válida? Yo necesito ayuda!
Solución
Ha intentado que codifica la cadena de búsqueda:
NSString * escapedKeyword = [palabra clave stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];