我在iphone中使用ASIHttpRequest库,当我尝试在下面的URL上执行GET请求时,我收到此消息并且请求失败,如果他/她遇到此问题或者知道可能的解决方案请其他人请让我知道。其次,如果我将链接粘贴到浏览器中,它就可以正常工作。
[URL]
http://www.rugsale.com/iphone/app/?type=product_list¶ms=id%3D334&ver=1.0&key=kaoud
[ERROR]
检测到不正确的NSStringEncoding值0x0000。假设NSStringEncodingASCII。将在不久的将来停止这种兼容性映射行为。
提前谢谢
此致
Syed Arsalan Pervez www.saplogix.net
答案 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)
错误是您创建字符串的位置。您不提供所需的编码。