web-dev-qa-db-fra.com

iOS 5: Comment convertir un Emoji en caractère unicode?

Je souhaite convertir un Emoji en caractère unicode dans iOS 5.

Par exemple, la conversion smiling face with open mouth and cold sweat à \ue415.

Je suis allé à NSStringEncoding dans NSString Class Reference .

Dans iOS 4, NSUTF16BigEndianStringEncoding et NSUTF32BigEndianStringEncoding m'a donné <e415> et <0000e415>, respectivement, qui sont assez proches de ce que je veux.

Dans iOS 5, les résultats sont différents. Ça donne <d83dde04> et <0001f604>.

Comment puis-je avoir \ue415 pour smiling face with open mouth and cold sweat dans iOS 5? Je vous remercie.

27
Protocole

\ue415 fait partie du codage hérité des emoji et est spécifique à certains opérateurs japonais. SoftBank, NTT et docomo avaient tous leurs propres jeux de caractères emoji privés.

iOS 5 est passé à la nouvelle prise en charge Unicode 6.0 spécifiée pour les plans de caractères emoji et <0001f604> est le point de code Unicode pour ce caractère. L'entrée wikipedia à ce sujet fait référence à un fichier de mappage EmojiSources.txt que vous devrez utiliser pour faire le mappage vous-même si vous avez vraiment besoin d'obtenir les anciens codes de caractères à usage privé.

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

14
Ashley Clark

Veuillez essayer ceci:

  1. Convertir Emoji en Unicode

    NSData *data = [strEmo dataUsingEncoding:NSNonLossyASCIIStringEncoding];
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
  2. Très facile à convertir unicode en Emoji

    NSData *data = [strEmo dataUsingEncoding:NSUTF8StringEncoding];
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding]; 
    
91
deepak

affichage des emoji dans UILabel:

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

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

vous devez faire attention à remplacer + par 3 zero chiffre

8
Hashem Aboonajmi

Reconvertissez en: -

NSData *newdata=[recievedstring dataUsingEncoding:NSUTF8StringEncoding 
allowLossyConversion:YES];
    NSString *mystring=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];
7
yadav

essayez ceci: http://opensource.Apple.com/source/ICU/ICU-461.13/icuSources/data/translit/Any_SoftbankSMS.txt

sur iOS5, utilisez le code de gauche, sur iOS 4 et ci-dessous, utilisez le bon code.

6
user392412

si votre emoji ne fait pas un aller-retour (d'ios à un serveur principal et de retour à ios), alors vous ne devriez pas avoir de problème ios (au moins 4.2+) gère l'encodage correctement et vous n'avez pas à le faire n'importe quoi. mais si votre application interagit avec un serveur, pensez-vous que la valeur de retour de votre serveur est incorrecte? c'est-à-dire que json a mal encodé.

J'ai eu le même problème, après avoir creusé pendant des heures et j'ai finalement trouvé cette réponse qui fonctionne pour moi: https://stackoverflow.com/a/8339255/1090945

Si vous utilisez Rails comme serveur, c'est tout ce que vous avez à faire. Pas besoin de faire quoi que ce soit dans ios/xcode, passez simplement la NSString sans faire aucun encodage UTF8/16 au serveur.

Postegre stocke le code correctement, c'est juste lorsque vous renvoyez la réponse json à votre client ios, en supposant que vous effectuez le rendu json: @message, l'encodage json a un problème.

vous pouvez tester si vous rencontrez un problème d'encodage json dans votre console Rails en faisant un test simple dans votre console

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

test.to_json

s'il imprime "{\" smiley\": \"\uf604\"}" (notez que le 1 est perdu), alors vous avez ce problème. et le patch du lien le corrigera.

4
lionel