ASIHTTPRequest: обнаружено неправильное значение NSStringEncoding 0x0000 - PullRequest
3 голосов
/ 30 августа 2011

Обнаружено неправильное значение NSStringEncoding 0x0000. Если предположить, NSStringEncodingASCII. Остановит это поведение сопоставления совместимости в ближайшее будущее.

Когда я использовал ASIHTTPRequest, я получаю эту ошибку (50% случаев), что с ней не так?

Я предполагаю, что URL, который я передал, является правильным, так как он не содержит пробелов или странных символов, может быть, это строка результата, имеющая какой-то нераспознанный символ?

1 Ответ

0 голосов
/ 24 ноября 2011

Копирование моего ответа из 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];
}
...