iPhone кодировка нелатинских символов - PullRequest
0 голосов
/ 16 февраля 2011

Я пытаюсь проанализировать JSON-ответ на запрос GET.Когда символы латинские, не проблема.

Однако, когда они не латинские, сообщение не выходит правильно.Я попробовал греческий и вместо "πανος" я получаю "& pi; & alpha; & nu; & omicron; & sigmaf;"

Код, который я использую для анализа ответа:

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

NSLog(@"response %@", responseString);




// array from the JSON string
NSArray *results = [responseString JSONValue];

Когда я пытаюсь прочитать ответ с веб-сайта, используя ajax, все в порядке.То же самое относится и к попытке отправить GET-запрос на серверы приложений с данными с iphone.Поэтому, когда я передаю данные на сервер и читаю их с сайта, все в порядке.Когда я пытаюсь показать те же данные в приложении, «Хьюстон, у нас проблема».

Есть какие-нибудь подсказки?

РЕДАКТИРОВАТЬ: Чтобы избежать недоразумений, это не проблема HTML, я просто отмечу, что для некоторых символов readon utf-8 здесь кодируются правильно и автоматически, например.«& pi» будет преобразовано в «π», однако цель c, похоже, не делает этого сама по себе

Ответы [ 4 ]

0 голосов
/ 17 февраля 2011

Я столкнулся с той же проблемой, но решил ее, изменив анализатор JSON. Я начал использовать SBJSONParser, и теперь я получаю соответствующие результаты. Это фрагмент кода, который я использовал

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
SBJSON *parser=[[SBJSON alloc]init];
NSArray *JSONData = (NSArray*)[parser objectWithString:returnString error:nil];
0 голосов
/ 16 февраля 2011

Попробуйте использовать этот фрагмент кода:

  NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

  NSString *decodedString = [NSString stringWithUTF8String:[responseString cStringUsingEncoding:[NSString defaultCStringEncoding]]];


  NSLog(@"response %@", decodedString);


  // array from the JSON string
  NSArray *results = [decodedString JSONValue];
0 голосов
/ 17 февраля 2011

Я думаю, что есть путаница.

π является HTML-сущностью , которая не связана с текстовой кодировкой , такой как UTF8 / Latin.

Прочитайте Википедию для подробностей о ...

Вам нужен синтаксический анализатор для декодирования этих сущностей, как тот, который ранее упоминал Chiefly Izzy:

NSString+HTML category and method stringByReplacingHTMLEntities
0 голосов
/ 16 февраля 2011

Посмотрите на Cocoanetics NSString + категорию HTML и метод stringByReplacingHTMLEntities.Вы можете найти его по адресу:

https://github.com/Cocoanetics/NSAttributedString-Additions-for-HTML/blob/master/Classes/NSString%2BHTML.m

Вот довольно приличный список множества сущностей HTML и соответствующих им символов Юникода.

...