Копирование моего ответа из https://stackoverflow.com/q/8251175/918764
Ошибка не в том, что ваши данные не закодированы правильно, скорее всего, вы запрашиваете какие-то строковые данные у объекта ASIHTTPRequest
, для которого еще не установлена кодировка - это произойдет, если Не удалось подключиться к серверу или если сервер не отправил понятный заголовок кодировки.
Это, в частности, происходит, если вы звоните [asiHttpRequest getResponseString]
до того, как верный ответ был возвращен, и кодировка запроса была установлена (т.е. не удалось подключиться к серверу).
Самый простой способ обойти это предупреждение - отредактировать класс ASIHTTPRequest
, удалить @synthesize responseEncoding
и добавить простой пользовательский метод получения / установки, чтобы вы могли вернуть кодировку по умолчанию, если кодировка ответа не установлена:
- (NSStringEncoding) responseEncoding
{
return responseEncoding || self.defaultResponseEncoding;
}
- (void) setResponseEncoding:(NSStringEncoding)_responseEncoding
{
responseEncoding = _responseEncoding;
}
Существует также более конкретный обходной путь для метода getResponseString
, который, я думаю, является единственным местом, где используется кодировка без проверки значения - поскольку кодирование должно быть установлено для любого ответа ненулевой длины:
- (NSString *)responseString
{
NSData *data = [self responseData];
if (!data) {
return nil;
}
// --- INSERT THIS BLOCK ---
// If the 'data' is present but empty, return a simple empty string
if (data.length == 0) {
return @"";
}
//assert(self.responseEncoding); // if you're into runtime asserts, uncomment this
// --- END OF BLOCK TO INSERT ---
return [[[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:[self responseEncoding]] autorelease];
}