检测到不正确的NSStringEncoding值0x0000

时间:2010-11-30 19:01:02

标签: iphone ios4 asihttprequest

我在iphone中使用ASIHttpRequest库,当我尝试在下面的URL上执行GET请求时,我收到此消息并且请求失败,如果他/她遇到此问题或者知道可能的解决方案请其他人请让我知道。其次,如果我将链接粘贴到浏览器中,它就可以正常工作。

[URL]

http://www.rugsale.com/iphone/app/?type=product_list&params=id%3D334&ver=1.0&key=kaoud

[ERROR]

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

提前谢谢

此致

Syed Arsalan Pervez www.saplogix.net

5 个答案:

答案 0 :(得分:5)

如果在返回有效响应并且已设置请求编码(即无法连接到服务器)之前调用[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];
}

答案 1 :(得分:3)

对我来说问题是超时不够。所以它返回一个空响应。因此,它会出现此错误,因为您尝试使用空响应执行某些操作。我增加了时间。所以它解决了我的问题。[request setTimeOutSeconds:200];

答案 2 :(得分:1)

这只是说当预期值时,编码为零。尝试在源代码中搜索“encoding:nil”或“encoding:NULL”并将其替换为有效编码,例如NSStringEncodingASCII ...

答案 3 :(得分:0)

这看起来像4.2 SDK中出现的东西。在我自己更新我的开发环境之前,我没有看到这一点。

All-Seeing Interactive可能需要更新代码以确保兼容性。

答案 4 :(得分:-1)

错误是您创建字符串的位置。您不提供所需的编码。