执行转换后,我得到了奇怪的NSString值。例如,我有一个值为2(00000010)的字节存储在响应中。我尝试了NSString initWithData和initWithBytes,但都返回了奇怪的符号(颠倒的问号)。这是我的代码:
NSString *command1 = [[NSString alloc] initWithData:response encoding:NSASCIIStringEncoding];
NSString *command2 = [[NSString alloc] initWithBytes:[response bytes] length:[response length] encoding:NSASCIIStringEncoding];
NSLog(@"command1: %@", command1);
NSLog(@"command2: %@", command2);
还尝试了NSUTF8StringEncoding,但NSASCIIStringEncoding是正确的,因为数据每个符号编码一个字节。
答案 0 :(得分:1)
ASCII不一定是正确的编码。 ASCII仅定义0x00
和0x7F
之间的字符。如果响应是HTTP响应,并且未在HTTP Content-Type
标头中指定编码,则默认为ISO-8859-1,您应使用NSISOLatin1StringEncoding
使用的编码无关紧要:控制字符(0x00
- 0x1F
)不一定是可打印的。
答案 1 :(得分:1)
从我正在阅读的内容来看,这就是你想要的:
NSString *stringWithContentsOfBinaryData(NSData *data)
{
NSMutableString *output;
int len = [data length];
uint8_t *bytes = [data bytes];
for (int i = 0; i < len; i++)
{
[output appendFormat:@"%i", bytes[i]];
}
return output;
}
它只是简单地将每个字节转换为它的整数表示形式,并将其连接成一个字符串。