Google Translate будет использовать специальные символы с помощью target-c

Начну с того, что я сделал домашнее задание, но не нашел ответа на свой вопрос.

Я пытаюсь использовать ссылку translate.google.com/translate_a для перевода одного слова со шведского на английский. Я делаю это в Objective-C.

вот пример:

word = @"hus"; // result should be "house"

urlPath = [NSString stringWithFormat:@"/translate_a/t?client=t&text=%@&langpair=sv|en", word];
url = [[NSURL alloc] initWithScheme:@"http" host:@"translate.google.com" path:urlPath];
NSLog(@"%@\n\n", url);
request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"GET"];
myData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
result = [[NSString alloc] initWithData:myData encoding: NSASCIIStringEncoding];
NSLog(@"%@\n\n", result);
self.viewController.textViewGood.text = result;

NSLog дает мне этот URL:
http://translate.google.com/translate_a/t?client=t&text=hus&langpair=sv%7Cen

NSLog также показывает правильный результат:

01.03.2013 00:07:14.681 testGoogTrans[941:11303] [[["дом","хус","",""]]

так далее..

Если я сейчас вызову указанный ранее URL-адрес в браузере, я получу внутри файл с тем же результатом.

Так что это отлично работает как в приложении, так и в браузере.

теперь, изменив только слово, имеющее специальный символ:

word = @"tåg"; // result should be "train"

а остальные остаются прежними, я получаю странный другой результат:

распечатанный URL в консоли:

http://translate.google.com/translate_a/t?client=t&text=t%C3%A5g&langpair=sv%7Cen, который кажется правильно экранированным.

если я вызову этот URL-адрес в браузере, я получу файл со следующим содержимым:

[[["поезда","tåg","",""]],[["ном",["ПОЕЗД","МАРШ","КАНАТ","МАШИННЫЙ","ЭКСПЕДИЦИЯ","ШЕСТВИЕ"]

и т. д., чего я и ожидаю.

вместо этого в приложении в консоли отображается следующий результат:

[[["t\u00C3 \u00A5 g","t\u00C3\u00A5g","",""]],,"sv",,[["t\u00C3",[5],1,0,998,0,1,0]

так далее...

я считаю, что URL-адрес правильно отформатирован, и я не знаю, почему я получаю другой ответ из приложения.

кто-нибудь знает что-то об этом или может указать мне направление, чтобы решить эту проблему?

заранее спасибо


person pm200107    schedule 01.03.2013    source источник


Ответы (1)


Я думаю, что эта строка является виновником:

result = [[NSString alloc] initWithData:myData encoding: NSASCIIStringEncoding];

и должно быть:

result = [[NSString alloc] initWithData:myData encoding: NSUTF8StringEncoding];

Когда я пробую ваш URL-адрес в Chrome под Linux, он загружает файл с именем t и:

$ file t
t: UTF-8 Unicode text, with very long lines, with no line terminators
person trojanfoe    schedule 01.03.2013
comment
спасибо за Ваш ответ. оба дают тот же результат для второго вызова. когда я пытаюсь в любом браузере, результат всегда хороший. это файл t.js с ожидаемым результатом (поездом). именно из приложения результат неверен или не соответствует ожидаемому. если вы используете NSUTF8StringEncoding для перевода слова hus, так как возвращается ASCII, результат получает (null) - person pm200107; 01.03.2013