Je souhaite convertir un Emoji en caractère unicode dans iOS 5.
Par exemple, la conversion à \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 dans iOS 5? Je vous remercie.
\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é.
Veuillez essayer ceci:
Convertir Emoji en Unicode
NSData *data = [strEmo dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
Très facile à convertir unicode en Emoji
NSData *data = [strEmo dataUsingEncoding:NSUTF8StringEncoding];
NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
affichage des emoji dans UILabel:
NSString *bellEmojiString = @"U+1F514";
label.text = [NSSting stringWithFormat:@"Table: %@", @"\U0001F514"];
vous devez faire attention à remplacer +
par 3 zero
chiffre
Reconvertissez en: -
NSData *newdata=[recievedstring dataUsingEncoding:NSUTF8StringEncoding
allowLossyConversion:YES];
NSString *mystring=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];
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.
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.