的NSLog显示奇怪的字符,而不是JSON
问题描述:
我有下面这段代码处理由我的服务器与插座发送响应:的NSLog显示奇怪的字符,而不是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);
可能重复[为什么不将工作从NSData转换为字符串? Swift](http://stackoverflow.com/questions/36894972/why-doesnt-cast-work-from-nsdata-to-string-swift) – Larme