Удаление юникода и обратной косой черты из NSString, преобразованного из NSData

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

NSData *data = self.responseData;
if (!data) {
    return nil;
}
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((__bridge CFStringRef)[self.response textEncodingName]));
NSString *responseString = [[NSString alloc] initWithData:data encoding:encoding];

Однако результирующая строка выглядит так:

"birthday":"04\/01\/1990",
"email":"some.address\u0040some.domain.com"

Я бы хотел

"birthday":"04/01/1990",
"email":"[email protected]"

без обратной косой черты и юникода. Каков самый чистый способ сделать это?


person jcm    schedule 26.01.2012    source источник
comment
похоже, что ответ закодирован в формате json, затем просто используйте декодер json, например SBJson, чтобы получить правильные строки   -  person Felix    schedule 26.01.2012
comment
@phix23 phix23 Не думал об этом, синтаксический анализ JSON дает правильную форму! Напишите ответ, и я приму его.   -  person jcm    schedule 26.01.2012


Ответы (2)


Ответ, похоже, закодирован в формате JSON. Поэтому просто декодируйте строку ответа, используя библиотеку JSON (SBJson, JsonKit и т. д.), чтобы получить правильную форму.

person Felix    schedule 26.01.2012

Вы можете заменить (или удалить) символы с помощью stringByReplacingCharactersInRange:withString: или stringByReplacingOccurrencesOfString:withString:.

Чтобы удалить (преобразовать) символы Юникода, используйте dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES (из этого ответа).

Извините, если следующее не имеет ничего общего с вашим случаем: лично я бы спросил себя, откуда вообще взялась эта обратная косая черта. Например, для JSON я бы знал, что какой-то сериализатор JSON на другой стороне экранирует некоторые символы (поэтому косые черты действительно присутствуют в ответе, и это не какая-то странная ошибка в Cocoa). Таким образом, я мог бы точно сказать, с какими персонажами мне нужно справиться и как. Или, может быть, я бы использовал какую-нибудь библиотеку, чтобы сделать это за меня.

person zrslv    schedule 26.01.2012
comment
На самом деле это связано, поскольку ответ находится в формате JSON. - person jcm; 26.01.2012