Как представить NSString со значением '\ 336 \ 362 \ 340' в соответствующей кодировке как обычный текст? - PullRequest
1 голос
/ 21 февраля 2012

Я получил такие строки из аудиопотока в виде заголовков:

--òà - Ïàäàòü

Я знаю, что эта строка на русском языке.И мне нужно правильно показать это в UILabel.Я пытаюсь это:

NSData *data = [value dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

Теперь goodValue содержит следующее значение:

\ 336 \ 362 \ 340 - \ 317 \ 340 \ 344 \ 340 \ 362 \ 374

Количество символов, как я вижу, сохранить с оригиналом.Но как мне преобразовать ее в обычную строку для использования в качестве текста в UILabel?

Заранее спасибо.

1 Ответ

3 голосов
/ 22 февраля 2012

Я написал код для итерации и регистрации всех возможных комбинаций.

Сначала я нашел список всех возможных кодировок в NSString.h и установил его в массив C возможных кодировок:

 int encodings[] = {
    NSASCIIStringEncoding,
    NSNEXTSTEPStringEncoding,
    NSJapaneseEUCStringEncoding,
    NSUTF8StringEncoding,
    NSISOLatin1StringEncoding,
    NSSymbolStringEncoding,
    NSNonLossyASCIIStringEncoding,
    NSShiftJISStringEncoding,
    NSISOLatin2StringEncoding,
    NSUnicodeStringEncoding,
    NSWindowsCP1251StringEncoding,
    NSWindowsCP1252StringEncoding,
    NSWindowsCP1253StringEncoding,
    NSWindowsCP1254StringEncoding,
    NSWindowsCP1250StringEncoding,
    NSISO2022JPStringEncoding,
    NSMacOSRomanStringEncoding,
    NSUTF16StringEncoding,
    NSUTF16BigEndianStringEncoding,
    NSUTF16LittleEndianStringEncoding,
    NSUTF32StringEncoding,
    NSUTF32BigEndianStringEncoding,
    NSUTF32LittleEndianStringEncoding
};

А теперь давайте повторим и покажем все возможные результаты:

int numberOfEncodings = 23;

for (int i = 0; i < numberOfEncodings; i++) {
    NSLog(@"=============== %d =============", encodings[i]);
    constchar *asd = [value cStringUsingEncoding:encodings[i]];
    if (asd == NULL) {
        NSLog(@"asd == NULL");
    } else {
        for (int j = 0; j < numberOfEncodings; j++) {
            NSString *str = [NSStringstringWithCString:asd encoding:encodings[j]];
            NSLog(@"%d: %@", encodings[j], str);
        }
    }
}

После этого я просматриваю результаты и нахожу хорошую строку.Вот и все =)

примечание: все кодировки являются значениями перечисления NSStringEncoding.И вы можете подумать, что вы можете перебирать от 0 до количества кодировок вместо определения массива encodings [].Но вы не должны этого делать, потому что значения кодирования не являются восходящими целыми числами.Например, NSMacOSRomanStringEncoding = 30 и некоторые из этих кодировок являются псевдонимами для другого.Чем лучше определить массив возможных кодировок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...