2011-12-26 120 views
27

我想在iOS 5中将表情符号转换为Unicode字符。iOS 5:如何将表情符号转换为Unicode字符?

例如,将smiling face with open mouth and cold sweat转换为\ue415

我去了NSStringEncoding in NSString Class Reference

在iOS 4的,NSUTF16BigEndianStringEncodingNSUTF32BigEndianStringEncoding给我<e415><0000e415>,分别,这是相当接近我想要的东西。

在iOS 5中,结果是不同的。它给了<d83dde04><0001f604>

如何在iOS 5中获得smiling face with open mouth and cold sweat\ue415?谢谢。

回答

14

\ue415是表情符号传统编码的一部分,特定于某些日本运营商。 SoftBank,NTT和docomo都有自己的私人表情符号字符集。

iOS 5已移动到新指定的Unicode 6.0支持表情符号字符平面,并且<0001f604>是该字符的Unicode代码点。关于此维基百科条目引用了EmojiSources.txt映射文件,如果您确实需要获取旧的专用字符代码,则需要使用它来执行映射。

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

+1

是的,我想使用表情符号的传统编码,因为它看起来像我的应用程序不会使用新的unicode 6.0,它可以读取“\ ue415”,但不能读取“\ U0001f604”。你能告诉我如何使用你提供的_EmojiSources.txt_映射文件吗? – Protocole 2011-12-27 03:15:33

+1

另一个1是http://arashnorouzi.wordpress.com/2011/08/31/adding-graphics-and-emoji-characters-to-apple-push-notifications/ – GameLoading 2012-03-14 05:41:14

4

如果你的表情符号没有采取往返行程(从ios到后端服务器并返回到ios),那么你应该没有任何问题ios(至少4.2+)正确处理编码,不得不做任何事情。但是如果你的应用与服务器交互,你怀疑你的服务器返回值是错误的吗?即json编码错误。

我有同样的问题,挖掘小时后,终于找到这个答案,对于我的作品:https://stackoverflow.com/a/8339255/1090945

如果您正在使用的轨道为您的服务器,这是所有你需要做的。无需在ios/xcode中做任何事情,只需传递NSString,而不需要对服务器执行任何UTF8/16编码。

Postegre正确存储代码,它只是在您将json响应发送回您的ios客户端时,假设您渲染json:@message,则json编码有问题。

你可以测试你是否在你的轨道有JSON编码问题,通过在控制台

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

test.to_json

做简单的测试控制台,如果它打印出“{\”笑脸\ “:\”\ uf604 \“}”(注意1丢失),那么你有这个问题。并从链接补丁将修复它。

90

请试试这个:

  1. 表情转换为Unicode

    NSData *data = [strEmo dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    
  2. 很容易Unicode字符转换成表情符号

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

如何以正确的格式显示表情符号字符? – 2012-07-22 17:19:02

+0

我很想知道让角色回来的答案... – fvisticot 2012-08-12 16:06:47

+1

这个解决方案和@yadav的一个解决方案在所有iOS版本中都能很好地工作。但是我有一个特殊的需求,它必须将字符串存储在服务器上并允许字符串搜索。在这种情况下,非表情符号不应编码为'\ u ..',这使得整个字符串不可读,并且机器不可搜索。有没有办法只对非表情符号进行转换? – 2012-11-06 07:46:55

7

转换回: -

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

dispalying的表情符号:

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

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

你应该小心与3 zero位取代+

+0

它不适用于表情符号字符串,例如U + 26F5 – Liangjun 2015-11-20 16:20:11

相关问题