Некорректное декодирование известной строки UTF-8 с сервера - PullRequest
1 голос
/ 19 февраля 2012

В моем приложении я получаю некоторые строковые значения с сервера, но не получаю правильную строку.

بسيط это строка со стороны сервера, но я получаю بسÙØ·

Я пытался проверить строку ответа в онлайн-декодере:

http://www.cafewebmaster.com/online_tools/utf8_encode

Это кодировка UTF-8, но я не смог декодировать строку на стороне iPhone.

Я посмотрел на эти ссылки переполнения стека в качестве ссылки

Преобразование экранированных символов UTF8 обратно в исходную форму
Юникод сбегает в объективе-c
utf8_decode для объектива-c

но никто из них не помог.

Ответы [ 3 ]

1 голос
/ 20 февраля 2012

Я не понимаю из вашего вопроса следующие пункты:

  1. У вас есть доступ на стороне сервера (я имею в виду его программирование)?
  2. Как вы отправляете и получаете данные на сервер?

В первом вопросе я предполагаю, что сервер запрограммирован отправлять вам текст в кодировке UTF-8.

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

NSString *messageToSend = @"The text in the language you like";
const uint8_t *str = (uint8_t *) [messageToSend cStringUsingEncoding:NSUTF8StringEncoding];
[self writeToServer:str];

Где функция writeToServer - это ваша функция, которая будет отправлять данные на сервер.

Если вы хотите поместить данные в базу данных SQLite3, используйте:

sqlite3_bind_text(statement, 2, [@"The text in the language you like" UTF8String], -1, NULL);

Если вы получаете данные с сервера (снова используя сокеты), сделайте следующее:

[rowData appendBytes:(const void *)buf length:len];
NSString *strRowData = [[NSString alloc] initWithData:rowData encoding:NSUTF8StringEncoding];

Надеюсь, это охватывает все случаи, которые вам нужны.

0 голосов
/ 20 февраля 2012

решено вопрос по этой ссылке

Различные виды декодирования UTF8 в NSString

NSString * string = @ "بسÙØ ·";

Я пытался

[NSString stringWithUTF8String:(char*)[string cStringUsingEncoding:NSISOLatin1StringEncoding]]

этот метод

Спасибо.

0 голосов
/ 20 февраля 2012

Без какого-либо источника трудно сказать что-либо убедительное, но в какой-то момент вы интерпретируете кодированную строку UTF-8 как ISO-8859-1 и (ошибочно) конвертируете ее в UTF-8:

Анализ строки 'بسيط':

  • необработанная длина: 8
  • логическая длина: 4
  • необработанных байтов: 0xD8 0xA8 0xD8 0xB3 0xD9 0x8A 0xD8 0xB7
  • интерпретируется как ISO-8859-1 (بسÙØ ·): 0xC3 0x98 0xC2 0xA8 0xC3 0x98 0xC2 0xB3 0xC3 0x99 0xC2 0x8A 0xC3 0x98 0xC2 0xB7

Так что в какой-то момент вы, вероятно, должны найти ссылку на ISO-8859-1 в своем коде. Найдите и удалите.

...