gpt4 book ai didi

iphone - 检测到不正确的 NSStringEncoding 值 0x0000(使用 ASIHTTPRequest)

转载 作者:行者123 更新时间:2023-12-03 18:27:13 24 4
gpt4 key购买 nike

我在我的应用程序中使用 ASIHTTPRequst,但遇到了一些问题,但仅限于某些设备。在某些情况下,我会收到以下错误:

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

我对此进行测试的选项有限,因为它适用于我所有的内部测试设备,但问题仍然出现在我的一台或多台客户测试手机上。当手机连接到蜂窝网络时也可能出现这种情况,因为它似乎在 WiFi 上工作。

有人知道是什么原因导致这个问题吗?我看到有类似类型的问题,但从其他问题答案和 ASIHTTPRequest 站点来看,我的代码看起来都是正确的。

编辑当错误发生时,没有收到服务器的响应,因此用户卡在注册/登录处。

urlEncodeValue:

- (NSString *)urlEncodeValue:(NSString *)str
{
NSString *result = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8);
return [result autorelease];
}

ASIHTTPRequest 代码片段:

    NSString *encodedUrlAdress = [NSString stringWithFormat:@"%@user/register/%@/%@/%@/%d/%@/%@/%@/%@", 
kUserServerAddress,
[self urlEncodeValue:_firstName],
[self urlEncodeValue:_lastName],
[self urlEncodeValue:_phoneNumber],
_sex,
[self urlEncodeValue:_birthDate],
[self urlEncodeValue:_address],
[self urlEncodeValue:_postalNumber]];
NSLog(@"encodedUrlAdress: %@", encodedUrlAdress);

NSURL *url = [NSURL URLWithString:encodedUrlAdress];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];

if (!error) {
// do stuff
}

最佳答案

复制我的答案 https://stackoverflow.com/q/8251175/918764 - 您很可能收到此消息,因为您对失败的请求调用 getResponseString。您应该确保在调用此命令之前检查是否收到响应:我发现测试总请求失败(即网络/服务器关闭)的一种方法是检查:

if (request.responseStatusCode == 0) {
// the request failed entirely
} else {
// you at least got a HTTP response
}
<小时/>

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

关于iphone - 检测到不正确的 NSStringEncoding 值 0x0000(使用 ASIHTTPRequest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8136925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com