Выпуск арабских символов - PullRequest
0 голосов
/ 27 марта 2012

У меня проблемы с отображением арабского текста в приложении для iPhone.Когда я отображаю его на UILabel, он выглядит как ?????? ????? ?????? Строка приходит с сервера в виде XML, я ее анализирую и отображаю на UILabel.Я не знаю, это связано с проблемой в iPhone или со стороны сервера.

  • Я хочу знать, как определить, что строка, поступающая с сервера, имеет правильную кодировку и допустимые арабские символы.

  • Этодостаточно напечатать значение каждого символа и проверить, что он находится между арабскими символами Юникода.(Как и значение ASCII символа A равно 65, а значение Z равно 90. Таким образом, значение 70 должно быть символом ASCII).

  • На сервере строка кодируется в кодировке UTF8.И серверная программа написана на c #.Какой метод записи используется для передачи арабского текста с сервера на iPhone?

  • Нужно ли использовать другие шрифты для правильного отображения арабских символов.

  • Есть ли какой-нибудь файл XML с арабским контентом в Интернете, откуда я могу правильно анализировать и отображать арабский текст?

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

РЕДАКТИРОВАТЬ:

Когда я NSLogged XML-данные, я получил те же ???? ???? ??? символов.

РЕДАКТИРОВАТЬ

См. Данные в стиле XML, которые я получил в консоли.

<CB_SEC_COMP>
<SC_COMP_ID>9999</SC_COMP_ID>
<SCA_LONG_NAME>???? ????? ?????????? ????? ?????????</SCA_LONG_NAME>
<SCE_LONG_NAME>CHINA SECURITY &amp; SURVEILLANCE TECHNOLOGY, INC.</SCE_LONG_NAME>
<SCA_SHORT_NAME>???? ????? ?????????</SCA_SHORT_NAME>
<SCE_SHORT_NAME>CHINA SECURITY &amp; SUR</SCE_SHORT_NAME>
<SC_MRK_CODE>9</SC_MRK_CODE>
<SC_SEC_CODE>86</SC_SEC_CODE>
<SC_STATUS>Y</SC_STATUS>
<TICKER_ID>CSR</TICKER_ID>
<SC_MRK_TYPE_CODE>0001</SC_MRK_TYPE_CODE>
<SC_EXCHANGE>DFM</SC_EXCHANGE>
<CUR_CODE>AED</CUR_CODE>
</CB_SEC_COMP>

Ответы [ 4 ]

4 голосов
/ 27 марта 2012

Вы должны отправлять и получать текст с сервера как в UTF-8 !!

С NSString.h:

enum {
    NSASCIIStringEncoding = 1,      /* 0..127 only */
    ...

    **NSUTF8StringEncoding = 4,**
    ...

    **NSUTF16StringEncoding = NSUnicodeStringEncoding,**      /* An alias for NSUnicodeStringEncoding */  
    ....
};
typedef NSUInteger NSStringEncoding;

В вашем приложении iOS код должен выглядеть следующим образом: ((NSData *) serverSentData - представление строки nsdata, полученной с сервера)

NSString* lableText = [[NSString alloc] initWithData:serverSentData encoding:NSUTF8StringEncoding ];

, если это UTF-16:

NSString* lableText = [[NSString alloc] initWithData:serverSentData encoding:NSUTF16StringEncoding ];

Кстати, вы можете использовать json.У меня все получалось, когда я отправлял цирилловый текст.

1 голос
/ 23 мая 2012

Спасибо за все ответы. Проблема была не со стороной iPhone. На сервере XML не был правильно закодирован в строку UTF8. Когда он правильно закодирован, я получил действительный арабский символ. Я только сделал код как

  NSString* lableText = [[NSString alloc] initWithData:serverSentData encoding: NSUTF8StringEncoding ];

для преобразования NSData в NSString, и это работало хорошо !!!

0 голосов
/ 25 апреля 2012
0 голосов
/ 10 апреля 2012

Если ваш сервер отправляет кодировку в шапке:

<?xml version="1.0" encoding="UTF-8" ?>

тогда встроенный или любой другой хорошо написанный XML-парсер будет обрабатывать и декодировать PCDATA (текст между тегами) правильным образом. Если ваш сервер не отправляет эту информацию, и вы не можете изменить ее на стороне сервера, вам нужно самим угадать, какую кодировку использует сервер, и вручную преобразовать результат в UTF-8. Например, если ваша строка в чистом 16-битном Unicode, вы можете сделать это следующим образом:

NSString *responseString = [[[NSString alloc] initWithData:responseData encoding:NSUnicodeStringEncoding] autorelease];
NSData* convertedData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...