检测到不正确的 NSStringEncoding 值 0x0000。假设
NSStringEncodingASCII。将停止此兼容性映射行为
不久的将来。
当我使用 ASIHTTPRequest 时,我不断收到此错误(50% 的时间),这是怎么回事?
我假设我传入的 URL 是正确的,因为它不包含任何空格或奇怪的字符,也许结果字符串包含一些无法识别的字符?
复制我的答案https://stackoverflow.com/q/8251175/918764 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
方法,我认为这是唯一使用编码而不检查值的地方 - 因为应该为任何非零长度响应设置编码:
- (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];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)