iOS 5:如何将表情符号转换为unicode字符?

时间:2011-12-26 11:42:44

标签: objective-c ios5 emoji nsstringencoding

我想在iOS 5中将表情符号转换为unicode字符。

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

我转到了NSString Class Reference中的 NSStringEncoding

在iOS 4中,NSUTF16BigEndianStringEncodingNSUTF32BigEndianStringEncoding分别给了<e415><0000e415>,这与我想要的非常接近。

在iOS 5中,结果不同。它提供<d83dde04><0001f604>

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

6 个答案:

答案 0 :(得分:91)

请试试这个:

  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 :(得分:14)

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

iOS 5已移至新指定的表情符号字符平面的Unicode 6.0支持,<0001f604> 该字符的Unicode代码点。维基百科条目引用了一个EmojiSources.txt映射文件,如果你真的需要获取旧的私有用字符代码,你需要自己进行映射。

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

答案 2 :(得分:8)

在UILabel中显示表情符号:

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

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

您应该小心使用3 +数字

替换zero

答案 3 :(得分:7)

转换回: -

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

答案 4 :(得分:6)

试试这个:http://opensource.apple.com/source/ICU/ICU-461.13/icuSources/data/translit/Any_SoftbankSMS.txt

在iOS5上使用左侧代码,在iOS 4及以下版本中使用正确的代码。

答案 5 :(得分:4)

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

我有同样的问题,经过几个小时的挖掘,终于找到了适合我的答案:https://stackoverflow.com/a/8339255/1090945

如果您使用rails作为服务器,这就是您需要做的。无需在ios / xcode中执行任何操作,只需传递NSString,而无需对服务器执行任何UTF8 / 16编码。

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

您可以通过在控制台中进行简单测试来测试您的rails控制台中是否存在json编码问题

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

test.to_json

如果打印出“{\”smiley \“:\”\ uf604 \“}”(注意1丢失了),那么你有这个问题。并且链接中的补丁将修复它。