我正在尝试从包含表情符号的unicodes的后端提取JSON文件。这些不是传统的unicodes(例如:\ ue415),而是跨平台工作的unicodes(例如:\ U0001F604)。
以下是json的一个示例片段:
[
{
"unicode": "U0001F601",
"meaning": "Argh!"
},
{
"unicode": "U0001F602",
"meaning": "Laughing so hard"
}
]
我很难将这些字符串转换为在应用程序中显示为表情符号的unicodes。
非常感谢任何帮助!
答案 0 :(得分:4)
为了将这些unicode字符转换为NSString,您需要获取这些unicode字符的字节。
获取字节后,很容易用字节初始化NSString。下面的代码完全符合您的要求。它假定jsonArray
是你的json被拉出来的NSArray
。
// initialize using json serialization (possibly NSJSONSerialization)
NSArray *jsonArray;
[jsonArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSString *charCode = obj[@"unicode"];
// remove prefix 'U'
charCode = [charCode substringFromIndex:1];
unsigned unicodeInt = 0;
//convert unicode character to int
[[NSScanner scannerWithString:charCode] scanHexInt:&unicodeInt];
//convert this integer to a char array (bytes)
char chars[4];
int len = 4;
chars[0] = (unicodeInt >> 24) & (1 << 24) - 1;
chars[1] = (unicodeInt >> 16) & (1 << 16) - 1;
chars[2] = (unicodeInt >> 8) & (1 << 8) - 1;
chars[3] = unicodeInt & (1 << 8) - 1;
NSString *unicodeString = [[NSString alloc] initWithBytes:chars
length:len
encoding:NSUTF32StringEncoding];
NSLog(@"%@ - %@", obj[@"meaning"], unicodeString);
}];
答案 1 :(得分:0)
// String to unicode
如果let data = NormalString.data(using:String.Encoding.nonLossyASCII),let convertedString = String.init(data:data,encoding:String.Encoding.utf8){return convertedString}
// Unicode to string
如果let data = UnicodeString.data(using:String.Encoding.utf8),let convertedString = String.init(data:data,encoding:String.Encoding.nonLossyASCII){return convertedString}