Как правильно конвертировать из NSData в NSString? - PullRequest
0 голосов
/ 08 февраля 2012

Я получаю странное значение 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 является правильным, потому что данные приходят закодированы один байт на символ.

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Из того, что я читаю, это то, что вы хотите:

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;
}

Он просто конвертирует каждый байт в целочисленное представление и объединяет его в строку.

1 голос
/ 08 февраля 2012

ASCII не обязательно является правильной кодировкой. ASCII определяет только символы от 0x00 до 0x7F. Если ответ является ответом HTTP и кодировка не указана в заголовке HTTP Content-Type, по умолчанию используется ISO-8859-1, для которого следует использовать NSISOLatin1StringEncoding

И не имеет значения, какую кодировку вы используете: управляющие символы (0x00 - 0x1F) не обязательно должны быть напечатаны.

...