28

我想在 iOS 5 中将 Emoji 转换为 unicode 字符。

例如,转换张开嘴和冷汗的笑脸\ue415.

我去了NSString Class Reference中的NSStringEncoding 。

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

在 iOS 5 中,结果有所不同。它给出了<d83dde04><0001f604>

在 iOS 5 中如何获得\ue415张开嘴和冷汗的笑脸谢谢你。

4

6 回答 6

93

请试试这个:

  1. 将表情符号转换为 unicode

    NSData *data = [strEmo dataUsingEncoding:NSNonLossyASCIIStringEncoding];
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
  2. 很容易将 unicode 转换为 Emoji

    NSData *data = [strEmo dataUsingEncoding:NSUTF8StringEncoding];
    NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding]; 
    
于 2012-06-11T13:41:05.597 回答
14

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

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

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

于 2011-12-26T18:56:12.763 回答
7

转换回:--

NSData *newdata=[recievedstring dataUsingEncoding:NSUTF8StringEncoding 
allowLossyConversion:YES];
    NSString *mystring=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];
于 2012-09-04T11:36:42.663 回答
7

在 UILabel 中显示表情符号:

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

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

你应该小心替换+为 3zero位数

于 2014-09-11T07:00:41.647 回答
6

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

在 iOS5 上,使用左侧代码,在 iOS 4 及更低版本上,使用右侧代码。

于 2012-03-18T04:36:39.467 回答
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 丢失),那么你有这个问题。链接中的补丁将修复它。

于 2012-06-04T00:12:20.203 回答