NSURLERRORBADURL ERRO
-
21-09-2019 - |
Pergunta
Meu aplicativo para iPhone chamado Pesquisa local do Google (versão não JavaScript) para se comportar algum negócio de pesquisa.
Abaixo está o meu código para formar um 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];
Quando a palavra-chave se refere a caracteres em inglês, funciona bem, mas quando se refere a caracteres chineses (codificados no UTF8, como '天安门' cujo código UTF8 é 'e5a4a9 e5ae89 e997a8'), ele relatará NSurlerrorbadurl Erro (-1000, devolvido quando Um URL é suficientemente malformado para que uma solicitação de URL não possa ser iniciada). Por quê?
Então eu realizo mais investigação, uso o Safari e digito o URL abaixo:http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q= 天安门
Também funciona, e a saída que obtive de Macsniffer é:/ajax/services/search/local?v=1.0&q=%E5%A4%A9%E5%E®%89%E9%97%A8
Então eu escrevo um URL de teste diretamente no meu aplicativo
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"];
E o que eu recebi do Macsniffer é outra coisa:/ajax/services/search/local?v=1.0&q=1.687891E-28750X1.417C0001416CP-102640X1.4CC2D04648FBP-9999-1.989891E+0050X1.20DC00184CC67P-953E8E99A8
Parece que minha palavra -chave "%E5%A4%A9%E5%AE%89%E9%97%A8" foi traduzida em outra coisa. Então, como posso formar um URL válido? Eu preciso de ajuda!
Solução
Você já tentou codificar a sequência de pesquisa:
NSString* EscapeDKeyword = [Keyword StringByAddingPercentesCapeSUsingEncoding: NSUTF8StringEncoding];