более конкретно об отправке json с utf8 на iphone с php сервера - PullRequest
0 голосов
/ 30 июня 2011

У нас есть php-сервер, который отправляет строку json в кодировке utf-8. Я отвечаю за приложение для iphone, которое получает данные.

Я хочу быть уверен, что на моей стороне все правильно:

//after I downlad the data stream :

NSString* content = [[NSString alloc] initWithData:self.m_dataToParse encoding:NSUTF8StringEncoding];

//here the data is shown correctly in the console

NSLog(@"%@",content);

SBJsonParser *_parser = [[SBJsonParser alloc]init];

NSDictionary *jsonContentDictionary = [_parser objectWithData:self.m_dataToParse];

//here, when i printer values of array IN array, i see \u454 u\545 \4545 format. any ideas why ?

for(id key in jsonContentDictionary)

{

NSLog(@"key:%@, value:%@,key, [ jsonContentDictionary objectForKey:key]);

}

я использую последнюю версию библиотеки json: https://github.com/stig/json-framework/

Есть проблема со стороной iphone? (парсер json?) или на php сервере?

просто чтобы быть снова ясным: 1. на консоли, перед json строка выглядит нормально 2. после выполнения json массив значений массива имеет формат \u545 \u453 \u545

Заранее спасибо.

1 Ответ

0 голосов
/ 30 июня 2011

Ваш код правильный.Возможная причина проблемы, и вы должны выяснить ее у своего провайдера контента (сервера, который отправляет вам json), заключается в том, что даже если вся строка json правильно закодирована как utf-8 (помните: текст json являетсяпоследовательность символов и т. д. должна быть указана кодировка), может случиться так, что некоторое или все текстовое содержимое (то есть значения отдельных объектов, содержащихся в сообщении json) было изначально закодировано в другом формате, обычно это HTML-кодирование (iso-8859), особенно когда используются определенные символы (например, кириллица или азиаты).Теперь фреймворк json по умолчанию декодирует все данные как utf-8, но если существует несоответствие кодирования между символами utf-8 и iso-8859 (просто для того, чтобы остаться в примере), то единственный способ преобразовать их в utf-8 использовать формат \ u.Это происходит довольно часто, особенно когда php-скрипты извлекают информацию из HTML-страниц, которые обычно кодируются с использованием iso-8859.И учтите также, что iOS не может преобразовать весь набор символов iso-8859 в юникод (например, кириллица).Возможны следующие решения: - выполнить кодировку содержимого на стороне сервера текстов (iso-8859 -> utf-8) - или, если это невозможно, вы должны распознать последовательности \ uxxx, чаще всего встречающиеся в вашем контенте.поставщика и замените их соответствующими символами utf-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...