Почему Emoji не может правильно отображаться в UITextField? - PullRequest
5 голосов
/ 30 марта 2012

Когда символ Emoji установлен с использованием кода ниже:

self.textField.text = @"\ue415";

Это просто отображать в виде квадрата. Но когда я ввожу эмодзи с клавиатуры, он отображается правильно. В чем проблема?

PS: я использую IOS 5.1

Text View with Emoji Characters

1 Ответ

2 голосов
/ 08 марта 2013

В более старых версиях iOS все символы Emoji находились в области частного использования Unicode, которая, как следует из названия, представляет собой набор кодовых точек Unicode, которые явно не имеют никаких связанных символов.Однако стандарт Unicode был обновлен и теперь включает большое количество символов Emoji, поэтому теперь iOS использует их, как и Mac OS X.

Вы можете увидеть список всех Emoji Unicode в диаграммах кодана www.unicode.org/charts, например, http://www.unicode.org/charts/PDF/U1F600.pdf, и они также сообщают вам, что на самом деле должен представлять каждый эмодзи.

Ни один из эмодзи Unicode не находится на базовой многоязычной плоскости спецификации UnicodeЭто означает, что они все слишком велики, чтобы поместиться в одном iOS-уничаре.Поэтому, когда они хранятся в строке NSSt, каждый смайлик будет охватывать несколько уникальных символов - что-то, о чем следует знать, если вы попытаетесь перебирать символы в строке.

Если у вас есть код, такой как

NSString *emoji =@"\U0001F604";
NSString *ascii = @"A";
NSLog(@"emoji.length %d, ascii.length %d", emoji.length, ascii.length);

Вы увидите это в выходных данных

2013-03-08 14:42:22.841 test[23980:c07] emoji.length 2, ascii.length 1

, где сингл ? УЛЫБАЮЩИЕСЯ ЛИЦА С ОТКРЫТЫМИ ГЛАЗАМИ И УЛЫБАЮЩИМИСЯ ГЛАЗАМИ имеет длину в два unichars, а не одну, как мы могли ожидать.

...