2009-05-07 3 views
33

Я чувствую себя невероятно глупо, спрашивая об этом, но документация и Google не дают мне никакой любви вообще.Как избежать символа Unicode в исходном коде Objective-C?

У меня есть символ Юникода. Я хочу вставить строковый литерал в исходный код моего iPhone-приложения. Я знаю его шестнадцатеричное значение. Какая правильная escape-последовательность используется? И в этом отношении, какой очевидный источник информации я упускаю из виду, что сказал бы мне об этом?

+0

Подобный вопрос/ответ для Swift: http://stackoverflow.com/questions/31284538/how-to-express-strings-in-swift-using-unicode-hexadecimal-values-utf-16 – Suragch

ответ

56

Пример:

NSString *stuff = @"The Greek letter Beta looks like this: \u03b2, and the emoji for books looks like this: \U0001F4DA"; 
+1

Это сделало это. Благодаря! –

+3

Вам не нужно избегать этого. По умолчанию редактор и компилятор toolchain будут интерпретировать исходный код как UTF8. Вы можете использовать любой символ юникода в строковых константах. Это было неверно до инструментальной цепочки Mac OS X 10.5. – Ken

+0

Это также зависит от того, какие шрифты вы используете. Есть несколько шрифтов, которые не поддерживают все юникоды. –

1

Правильная последовательность выхода будет что-то вдоль линий

wchar_t * str = L"\x0627"; 

Смотрите этот вопрос: character constant:\000 \xhh

Edit: Ой, извините, я пропустил iPhone и теги, Objective-C. Вышеприведенное относится к общему C/C++, но я не работал с разработкой iPhone, поэтому ваш пробег может отличаться.

+0

Работает: \ u0024 "\t для UTF-16 и" \ x24 "для UTF-8 в Objective-C соответственно" \ u {0024} "и" \ u {24} "в Swift; мой ответ не затрагивает широкие символы – tontonCD

+0

Yay, также работает для унихарских и символьных литералов, e g 'unichar x = L '•';'. (хорошо, если вы работаете с NSString и getCharacters/stringWithCharacters) – nevyn

10

Если вы не хотите, чтобы поставить его прямо в строке вы можете использовать спецификатор формата, как это:

[string stringByAppendingFormat:@"%C", 0x2665]; 
-3

\ является маскирующим в Objective C , используйте его до того, как письмо будет скрыто, например:

NSString temp = @" hello \"temporary.h\" has been inported"; 

Здесь, если вы печатаете Температура строки в TextView или журналов, вы увидите " печатается, а потому, что мы использовали \ перед ними, который является маскирующим

+0

Это не отвечает на вопрос, так как он не объясняет, как символ '' 'escape-символ позволяет вам вставить символ Юникода. – Supuhstar

3

Более современный подход:

Я не уверен, когда эта функция была добавлено к языку, но по состоянию на 2015 год, по крайней мере, Строковые литералы Objective-C могут содержать любой символ Юникода. Например, я отмечаю мой лог линию с смайликами, потому что их отличительные цвета простым способ для меня, чтобы забрать их:

message:@" \n \n\t‼️ Error: %@"

Итак, если у вас есть характер и не только точка коды, и вы хотите использовать его в статической строке, а не динамически генерировать его, это отличный подход, так как вы сразу же знаете, какого персонажа вы используете, просто взглянув на него.

+1

Это «всегда» было так, потому что значения «всегда» простираются, по крайней мере, до введения LLVM, если не раньше. –

+0

@ BrentRoyal-Gordon благодарит! Теперь я знаю – Supuhstar

Смежные вопросы