Неправильное декодирование известной строки UTF-8 с сервера

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

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

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

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

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

Я взглянул на эти ссылки в качестве ссылки

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

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

3 ответа

РЕШАЕТ проблему из этой ссылки

Разный декодер UTF8 в NSString

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

Я пытался

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

Этот метод

Спасибо.


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

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

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

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

NSString *messageToSend = @"The text in the language you like";
const ******* *str = (******* *) [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];

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


Без какого-либо источника трудно сказать что-либо убедительное, но в какой-то момент вы интерпретируете кодированную строку 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. Найдите его и удалите.

licensed under cc by-sa 3.0 with attribution.