首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASIHTTPRequest:检测到不正确的NSStringEncoding值0x0000

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

Stack Overflow用户
提问于 2011-08-30 03:40:34
回答 1查看 3.8K关注 0票数 3

检测到

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

当我使用ASIHTTPRequest时,我不断地得到这个错误(50%的次数),它有什么问题吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-24 01:31:47

https://stackoverflow.com/q/8251175/918764复制我的答案

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

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

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

代码语言:javascript
复制
- (NSStringEncoding) responseEncoding
{
    return responseEncoding || self.defaultResponseEncoding;
}

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

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

代码语言:javascript
复制
- (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];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7238432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档