Проблема с кодировкой строк в IOS

Я столкнулся с проблемой кодирования строк в разработке ios. История выглядит следующим образом:

Я создаю некоторые значения на китайском языке, а затем создаю NSDictionary для этих значений, словарь используется в качестве параметра для сетевого запроса:

введите здесь описание изображения

- (void)createActivity
{
    NSString *actionTheme = titleF.text;
    NSString *actionTitle = biaotiF.text;
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:actionTheme, @"actionTheme", actionTitle, @"actionTitle",nil];
    [self networkrequest:];
}

Затем была проделана некоторая работа для словаря:

Преобразуйте словарь в форму JSON как тип NSString.

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:param options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

Кодирование строки из-за китайского слова в строке.

NSString *urlEncodedString = [jsonString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Наконец, полный URL-адрес был создан со строкой выше:

http://app.ic100.com/action/add?paramJson=%7B%22actionTheme%22%3A%22%E6%88%96%E8%80%85%E5%92%8C%E7%94%9F%E6%B4%BB%22%2C%22actionSite%22%3A%22%E5%8E%A (something like this)

Я использую сторонний «ASIFormDataRequest» для сетевого запроса, а также устанавливаю StringEncoding:

ASIFormDataRequest *requstHttp  = [[ASIFormDataRequest alloc] init];
[requstHttp setStringEncoding:NSUTF8StringEncoding];
....

Все данные были успешно отправлены на сервер, но когда я запрашиваю эти данные с сервера и показываю их на iphone. Получается нечитаемый текст:

введите здесь описание изображения

Я тщательно проверил все места, где я должен кодировать или декодировать строку, и используется только utf8. Более того, для серверной части никакая другая кодировка также не используется. И мой коллега проверил отправленные данные с платформы Android, никаких проблем. Так что я думаю, может быть, я упустил некоторые моменты.

Любой совет?


person itenyh    schedule 16.10.2014    source источник
comment
Мне непонятно, почему вы кодируете URL-адрес строки JSON. Также, если у вас есть проблемы со чтением данных с сервера, покажите этот код, а не код, который отправляет данные.   -  person Droppy    schedule 16.10.2014


Ответы (1)


Используя класс Base64, вы можете кодировать или декодировать строку.

Добавьте класс Base64 в свой проект из ЗДЕСЬ

см. метод в классе для кодирования.

Кодировать:

+ (NSString *)stringWithBase64EncodedString:(NSString *)string;

- (NSString *)base64EncodedString;

Расшифровать:

- (NSString *)base64DecodedString;
person Kirit Modi    schedule 16.10.2014
comment
Зачем вообще нужна категория, когда вся реальная реализация уже в NSData? Это может быть удобнее, но это, конечно, не обязательно. - person Droppy; 16.10.2014
comment
Так какую ценность добавляет ваш ответ? Какое отношение base-64 имеет к этой проблеме? - person Droppy; 16.10.2014