ASIHTTPRequest:检测到不正确的NSStringEncoding值0x0000

ASIHTTPRequest:检测到不正确的NSStringEncoding值0x0000,encoding,asihttprequest,Encoding,Asihttprequest,检测到不正确的NSStringEncoding值0x0000。假设 NSStringEncodingASCII。将在中停止此兼容性映射行为 不久的将来 当我使用ASIHTTPRequest时,我不断地遇到这个错误(50%的时候),它有什么问题 我假设我传入的URL是正确的,因为它不包含任何空格或奇怪的字符,可能是结果字符串有一些无法识别的字符?从中复制我的答案 错误不在于数据编码不正确,几乎可以肯定的是,您正在从一个尚未设置编码的ASIHTTPRequest对象请求某种字符串数据-如果请求未能连

检测到不正确的NSStringEncoding值0x0000。假设 NSStringEncodingASCII。将在中停止此兼容性映射行为 不久的将来

当我使用ASIHTTPRequest时,我不断地遇到这个错误(50%的时候),它有什么问题

我假设我传入的URL是正确的,因为它不包含任何空格或奇怪的字符,可能是结果字符串有一些无法识别的字符?

从中复制我的答案

错误不在于数据编码不正确,几乎可以肯定的是,您正在从一个尚未设置编码的
ASIHTTPRequest
对象请求某种字符串数据-如果请求未能连接到服务器,或者服务器没有发送可理解的编码头,则会发生这种情况


如果在返回有效响应和设置请求编码(即无法连接到服务器)之前调用
[asiHttpRequest getResponseString]
,则会发生这种情况

解决此警告的最简单方法是编辑
ASIHTTPRequest
类,删除
@synthesis responseEncoding
并添加一个简单的自定义getter/setter,以便在未设置响应编码时返回默认编码:

- (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];
}

你解决这个问题了吗,就像我现在一样?检查我的问题:-1:即使这个答案是正确的,你也应该用一个简短的摘要链接到另一篇文章,而不是复制它的全部内容。现在这个答案总是有两个版本(请注意,您对另一个问题的回答已经过编辑)。另外,我相信bradley.ayers在另一篇文章中关于
setResponseEncoding:
方法的内容的评论是正确的。我将接受更正。看起来你至少有三份这个答案的副本。编辑我的答案,只指向另一个问题,怎么样?你的观点的关键似乎是,这些问题都与同一个潜在问题有关;但它们不是作为重复项关闭的。然而,我并不认为我的回答真的像你所说的那样“没有用处”。