NSString заменяет символы Юникода - PullRequest
3 голосов
/ 15 июля 2011

Я работаю с сервером, и мне нужно загрузить текст в мое приложение iOS. Единственная проблема: все символы, такие как «é à ç», заменяются на «\ U008», например. Есть ли способ исправить эту проблему, заменить этот код на правильный символ?

Ответы [ 3 ]

4 голосов
/ 15 июля 2011

Попробуйте проанализировать полученный текст (переменная textToParse) с этим:

NSString *encodedString = textToParse;
NSString *decodedString = [NSString stringWithUTF8String:[encodedString cStringUsingEncoding:[NSString defaultCStringEncoding]]];
1 голос
/ 29 августа 2011

Я проверил некоторые кодировки и NSMacOSRomanStringEncoding хорошо вписался.

Мой тест был:

NSString *encodedString = [NSString stringWithCString:"Você realmente deseja sair da área restrita" encoding:NSMacOSRomanStringEncoding];

Помните, что сообщение должно быть C-строкой ("string"), а не NSString (@"string")

0 голосов
/ 02 мая 2018

Вы можете получить буфер символов и проверить каждый символ следующим образом:

- (NSString *) removeUnicode:(NSString *) unicodeString {
    NSUInteger len = [unicodeString length];
    unichar buffer[len+1];

    [unicodeString getCharacters:buffer range:NSMakeRange(0, len)];

    unichar okBuffer[len+1];
    int index = 0;
    for(int i = 0; i < len; i++) {
        if(buffer[i] < 128) {
            okBuffer[index] = buffer[i];
            index = index + 1;
        }
    }

    NSString *removedUnicode = [[NSString alloc] initWithCharacters:okBuffer length:index];

    return removedUnicode;
}

или использовать этот пример:

NSCharacterSet *notAllowedChars = [[NSCharacterSet characterSetWithCharactersInString:[NSCharacterSet alphanumericCharacterSet]] invertedSet];
stringWithOutUnicode = [[stringWithUnicode componentsSeparatedByCharactersInSet:notAllowedChars] componentsJoinedByString:@""];

, и вы можете создать свой собственный действительный набор символов иполучить недопустимые символы

NSString *allowedCharacters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSCharacterSet *notAllowedChars = [[NSCharacterSet characterSetWithCharactersInString: allowedCharacters] invertedSet];
...