我想在iOS 5中将表情符号转换为unicode字符。
例如,将转换为\ue415
。
我转到了NSString Class Reference中的 NSStringEncoding 。
在iOS 4中,NSUTF16BigEndianStringEncoding
和NSUTF32BigEndianStringEncoding
分别给了<e415>
和<0000e415>
,这与我想要的非常接近。
在iOS 5中,结果不同。它提供<d83dde04>
和<0001f604>
。
如何在iOS 5中获取的\ue415
?谢谢。
答案 0 :(得分:91)
请试试这个:
将表情符号转换为unicode
NSData *data = [strEmo dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
很容易将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映射文件,如果你真的需要获取旧的私有用字符代码,你需要自己进行映射。
答案 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丢失了),那么你有这个问题。并且链接中的补丁将修复它。