28

I want to convert an Emoji to a unicode character in iOS 5.

For example, converting smiling face with open mouth and cold sweat to \ue415.

I went to NSStringEncoding in NSString Class Reference.

In iOS 4, NSUTF16BigEndianStringEncoding and NSUTF32BigEndianStringEncoding gave me <e415> and <0000e415>, respectively, which are quite close to what I want.

In iOS 5, the results are different. It gaves <d83dde04> and <0001f604>.

How can I get \ue415 for smiling face with open mouth and cold sweat in iOS 5? Thank you.

Protocole
  • 1,733
  • 11
  • 28
  • 42

6 Answers6

93

Please try this :

  1. Convert Emoji to unicode

    NSData *data = [strEmo dataUsingEncoding:NSNonLossyASCIIStringEncoding];
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
  2. Very easy to convert unicode to Emoji

    NSData *data = [strEmo dataUsingEncoding:NSUTF8StringEncoding];
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding]; 
    
Mutawe
  • 6,464
  • 3
  • 47
  • 90
deepak
  • 931
  • 1
  • 6
  • 3
  • 1
    This solution together with @yadav's one works very well across all iOS versions. But I have a specific requirement that has to store the strings on a server and allows string search. In this case, non-emoji characters should not be encoded into '\u..' which makes the whole string human-nonreadable and machine non-searchable. Is there a way to do conversion only for non-emoji characters? – Nimit Pattanasri Nov 06 '12 at 07:46
  • The only thing that did the trick for me... as a Category to NSString its perfect. Thanks! – Aviel Gross Aug 13 '13 at 09:30
  • 1
    Hi , I have been looking at this Solution and Seems ok with ios. But want to know how can i convert these unicode to Emoticons in java and vice versa – Babul Prabhakar Feb 10 '15 at 13:31
  • How can i manage Emoji code as above in iOS and Android? I have to give support in iOS and Android vice versa. – Parthpatel1105 Jun 03 '15 at 11:12
  • @NimitPattanasri , aftter converting to unicode , for searching is possible, but unicode characters will be searched. – Arpit B Parekh Aug 23 '17 at 11:57
  • @Mutawe this encoding not support for other language like vietnamese or other. please help me – Yogendra Patel Jun 26 '19 at 12:32
14

\ue415 is part of the legacy encoding for emoji and is specific to certain Japanese carriers. SoftBank, NTT and docomo all had their own private emoji character sets.

iOS 5 has moved to the newly specified Unicode 6.0 support for emoji character planes and <0001f604> is the Unicode code point for that character. The wikipedia entry about this references an EmojiSources.txt mapping file that you'll need to use to do the mapping yourself if you really need to get the old private-use character codes.

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

Ashley Clark
  • 8,813
  • 3
  • 35
  • 35
  • 1
    Yes, I want to use the legacy encoding of Emoji because it seems like my app would not work with new unicode 6.0, it can read `\ue415` but not `\U0001f604`. Could you show me how to use _EmojiSources.txt_ mapping file that you provided? – Protocole Dec 27 '11 at 03:15
  • 1
    another 1 is http://arashnorouzi.wordpress.com/2011/08/31/adding-graphics-and-emoji-characters-to-apple-push-notifications/ – GameLoading Mar 14 '12 at 05:41
7

Convert back to:--

NSData *newdata=[recievedstring dataUsingEncoding:NSUTF8StringEncoding 
allowLossyConversion:YES];
    NSString *mystring=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];
nsgulliver
  • 12,655
  • 23
  • 43
  • 64
yadav
  • 103
  • 1
  • 8
7

dispalying emoji in UILabel:

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

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

you should be careful replace + with 3 zero digit

Hashem Aboonajmi
  • 13,077
  • 8
  • 66
  • 75
6

try this : http://opensource.apple.com/source/ICU/ICU-461.13/icuSources/data/translit/Any_SoftbankSMS.txt

on iOS5, use left code, on iOS 4 and below, use the right code.

user392412
  • 743
  • 12
  • 18
4

if your emoji doesn't take a round trip (from ios to a backend server and back to ios), then you shouldn't have any problem ios (at least 4.2+) handles the encoding correctly and you don't have to do anything. but if your app interact with a server, have you suspect that your server return value is wrong? i.e. json encoded wrong.

I had the same problem, after digging for hours and finally found this answer that works for me: https://stackoverflow.com/a/8339255/1090945

If you are using rails as your server, this is all you need to do. No need to do anything in ios/xcode, just pass the NSString without doing any UTF8/16 encoding stuff to the server.

Postegre stores the code correctly, it's just when you send the json response back to your ios client, assuming you do render json:@message, the json encoding has problem.

you could test whether you are having json encoding problem in your rails console by doing as simple test in your console

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

test.to_json

if it prints out "{\"smiley\":\"\uf604\"}" (notice the 1 is lost), then you have this problem. and the patch from the link will fix it.

Community
  • 1
  • 1
lionel
  • 385
  • 5
  • 12