iOS 5: как преобразовать эмодзи в символ юникода? - PullRequest
27 голосов
/ 26 декабря 2011

Я хочу преобразовать эмодзи в Unicode-символ в iOS 5.

Например, преобразовав smiling face with open mouth and cold sweat в \ue415.

Я перешел на NSStringEncoding в Ссылка на класс NSString .

В iOS 4 NSUTF16BigEndianStringEncoding и NSUTF32BigEndianStringEncoding дали мне <e415> и <0000e415> соответственно, что довольно близко к тому, что я хочу.

В iOS 5 результаты разные.Это дает <d83dde04> и <0001f604>.

Как я могу получить \ue415 для smiling face with open mouth and cold sweat в iOS 5?Спасибо.

Ответы [ 6 ]

91 голосов
/ 11 июня 2012

Пожалуйста, попробуйте это:

  1. Конвертировать Emoji в Unicode

    NSData *data = [strEmo dataUsingEncoding:NSNonLossyASCIIStringEncoding];
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
  2. Очень легко конвертировать Unicode в Emoji

    NSData *data = [strEmo dataUsingEncoding:NSUTF8StringEncoding];
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding]; 
    
14 голосов
/ 26 декабря 2011

\ue415 является частью устаревшей кодировки для эмодзи и характерна для определенных японских носителей. SoftBank, NTT и docomo имели свои собственные наборы символов эмодзи.

iOS 5 перешла на недавно указанную поддержку Unicode 6.0 для символов-эмодзи, а <0001f604> - это кодовая точка Unicode для этого символа. Запись в Википедии об этом ссылается на файл сопоставления EmojiSources.txt, который вам необходимо использовать для самостоятельного сопоставления, если вам действительно нужно получить старые коды символов личного пользования.

http://en.wikipedia.org/wiki/Emoji

8 голосов
/ 11 сентября 2014

вызывающих смайликов в UILabel:

NSString *bellEmojiString = @"U+1F514";

label.text = [NSSting stringWithFormat:@"Table: %@", @"\U0001F514"];

Вы должны быть осторожны, заменить + на 3 zero цифру

7 голосов
/ 04 сентября 2012

Преобразовать обратно в: -

NSData *newdata=[recievedstring dataUsingEncoding:NSUTF8StringEncoding 
allowLossyConversion:YES];
    NSString *mystring=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];
6 голосов
/ 18 марта 2012

попробуйте это: http://opensource.apple.com/source/ICU/ICU-461.13/icuSources/data/translit/Any_SoftbankSMS.txt

на iOS5, используйте левый код, на iOS 4 и ниже, используйте правильный код.

4 голосов
/ 04 июня 2012

если ваш смайлик не совершает круговорот (от ios до внутреннего сервера и обратно до ios), то у вас не должно возникнуть проблем с ios (как минимум 4.2+), который корректно обрабатывает кодировку, и вы этого не делаете надо делать что угодно. но если ваше приложение взаимодействует с сервером, подозреваете ли вы, что возвращаемое значение сервера неверно? то есть JSON закодирован неправильно.

У меня была такая же проблема, после нескольких часов копания и, наконец, нашел этот ответ, который работает для меня: https://stackoverflow.com/a/8339255/1090945

Если вы используете rails в качестве сервера, это все, что вам нужно сделать. Не нужно ничего делать в ios / xcode, просто передайте NSString, не выполняя никаких кодировок UTF8 / 16, на сервер.

Postegre правильно хранит код, просто когда вы отправляете ответ json обратно на клиент ios, при условии, что вы выполняете рендеринг json: @message, возникает проблема с кодировкой json.

Вы можете проверить, есть ли у вас проблемы с кодировкой json на вашей консоли rails, выполнив простой тест на вашей консоли

test = {"smiley"=>"u{1f604}"} 

test.to_json

если он печатает "{\" smiley \ ": \" \ uf604 \ "}" (обратите внимание, что 1 потеряно), то у вас есть эта проблема. и патч по ссылке это исправит.

...