ASIHTTPRequest:检测到错误的NSStringEncoding值0x0000

时间:2011-08-30 03:40:35

标签: encoding asihttprequest

  

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

当我使用ASIHTTPRequest时,我不断收到此错误(50%的时间),这有什么问题?

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

1 个答案:

答案 0 :(得分:0)

https://stackoverflow.com/q/8251175/918764

复制我的回答

错误并不是您的数据编码不正确,几乎可以肯定您从ASIHTTPRequest对象请求某种类型的字符串数据还没有编码集 - 这将会发生如果请求无法连接到服务器,或者服务器没有发送可理解的编码头。


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

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

- (NSStringEncoding) responseEncoding
{
    return responseEncoding || self.defaultResponseEncoding;
}

- (void) setResponseEncoding:(NSStringEncoding)_responseEncoding
{
    responseEncoding = _responseEncoding;
}

getResponseString方法还有一个更具体的解决方法,我认为这是唯一一个使用编码而不检查值的地方 - 因为编码应该设置为任何非零长度响应:< / p>

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