Ios - динамически создавать и отображать строки Unicode

У меня есть UILabel, в котором я хочу отобразить символ Юникода. Следующие работы:

label.text = @"\U000025A0";

Теперь я хочу динамически генерировать символ Unicode из десятичного числа следующим образом:

label.text = NSString stringWithFormat:@"\U%08x",9632];

Ошибка компилятора Xcode со следующей ошибкой:

\U used with no following hex digits

Есть ли способ конвертировать десятичный номер 9632 в Unicode, а затем отображать его в UILabel?

Ответ 1

У меня была одна и та же проблема для отображения специального символа entypo Font, поэтому я реализовал свой собственный класс EntypoStringCreator (с некоторой помощью от SO). Вот метод, используемый для преобразования номера юникода в nsstring:

.h

@interface EntypoStringCreator : NSObject

+(NSString *)stringForIcon:(UTF32Char)char32;

@end

.m

@implementation EntypoStringCreator


+(NSString *)stringForIcon:(UTF32Char)char32
{
    if ((char32 & 0xFFFF0000) != 0)
        return [self stringFromUTF32Char:char32];
    else
        return [self stringFromUTF16Char:(UTF16Char)(char32&0xFFFF)];
}

+(NSString *)stringFromUTF32Char:(UTF32Char)char32
{
    char32 -= 0x10000;
    unichar highSurrogate = (unichar)(char32 >> 10); // leave the top 10 bits
    highSurrogate += 0xD800;
    unichar lowSurrogate = char32 & 0x3FF; // leave the low 10 bits
    lowSurrogate += 0xDC00;
    return [NSString stringWithCharacters:(unichar[]){highSurrogate, lowSurrogate} length:2];
}

+(NSString *)stringFromUTF16Char:(UTF16Char)char16
{
    return [NSString stringWithCharacters:(unichar[]){char16} length:1];
}


@end

Ответ 2

попробуйте следующее:

NSString *myString = [NSString stringWithUTF8String:"0xF09F948A"]; <-- UTF-8 Hexadecimal Encoding

myLabel.text = myString;