NSLog 显示奇怪的字符而不是 JSON
NSLog show strange character instead of the JSON
下面这段代码处理我的服务器通过套接字发送的响应:
uint8_t buffer[4096];
int len;
NSMutableString *total = [[NSMutableString alloc] init];
while ([inputStream hasBytesAvailable]) {
len = (int)[inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSLog(@"Buffer: %s",buffer);
[total appendString: [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding]];
NSLog(@"Receive: %@, len: %d",total,len);
NSLog(@"len: %d, receive: %@",len,total);
}
}
我的服务器发送这样的文本文件:
[{"name_user":"stack overflow","user_key":"XXXXXXX","type":21}]
此代码的问题是,如果我发送 JSON,控制台日志会显示 JSON 的长度。但是如果我在下面发送 JSON:
[[{"name_user":"stack overflow","user_key":"XXXXXXX","type":21}],[{"name_user":"lacrifilm","user_key":"XXXXXXX","type":21}]]
表示 JSON 控制台日志中的两个值显示:
Buffer: ~
Receive: ~
len: 184, receive: ~
我相信问题不在我的服务器中,因为如果是我会得到:Receive: ~, len: 184
,而不是像我们在第二次调用中看到的那样 Receive: ~
没有 len: 184
NSLog
在我上面的命令中。
我该如何解决这个问题?
您构建的字符串不正确。您正在读取一系列字节,而不是字符串片段。因此,建立一个 NSMutableData
,然后在拥有所有数据后创建一个 NSString
。更多类似内容:
uint8_t buffer[4096];
NSMutableData *data = [[NSMutableData alloc] init];
while ([inputStream hasBytesAvailable]) {
NSInteger len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
//NSLog(@"Buffer: %s",buffer); // can't do this - buffer isn't a null-terminated C-string
[data appendBytes:buffer length:len];
NSLog(@"Receive: %@, len: %d", data, (int)len);
}
}
NSString *total = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Total: %@", total);
下面这段代码处理我的服务器通过套接字发送的响应:
uint8_t buffer[4096];
int len;
NSMutableString *total = [[NSMutableString alloc] init];
while ([inputStream hasBytesAvailable]) {
len = (int)[inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSLog(@"Buffer: %s",buffer);
[total appendString: [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding]];
NSLog(@"Receive: %@, len: %d",total,len);
NSLog(@"len: %d, receive: %@",len,total);
}
}
我的服务器发送这样的文本文件:
[{"name_user":"stack overflow","user_key":"XXXXXXX","type":21}]
此代码的问题是,如果我发送 JSON,控制台日志会显示 JSON 的长度。但是如果我在下面发送 JSON:
[[{"name_user":"stack overflow","user_key":"XXXXXXX","type":21}],[{"name_user":"lacrifilm","user_key":"XXXXXXX","type":21}]]
表示 JSON 控制台日志中的两个值显示:
Buffer: ~
Receive: ~
len: 184, receive: ~
我相信问题不在我的服务器中,因为如果是我会得到:Receive: ~, len: 184
,而不是像我们在第二次调用中看到的那样 Receive: ~
没有 len: 184
NSLog
在我上面的命令中。
我该如何解决这个问题?
您构建的字符串不正确。您正在读取一系列字节,而不是字符串片段。因此,建立一个 NSMutableData
,然后在拥有所有数据后创建一个 NSString
。更多类似内容:
uint8_t buffer[4096];
NSMutableData *data = [[NSMutableData alloc] init];
while ([inputStream hasBytesAvailable]) {
NSInteger len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
//NSLog(@"Buffer: %s",buffer); // can't do this - buffer isn't a null-terminated C-string
[data appendBytes:buffer length:len];
NSLog(@"Receive: %@, len: %d", data, (int)len);
}
}
NSString *total = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Total: %@", total);