我对用UTF8编码的表情符号的字节表示感到困惑。我的理解是UTF8字符大小可变,最多4个字节。
当我在iOS 13的UTF8中对❤️表情符号进行编码时,我会得到6个字节:
NSString* heartEmoji = @"❤️";
NSData* utf8 = [heartEmoji dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",utf8); // {length = 6,bytes = 0xe29da4efb88f}
如果我还原操作,仅消耗前3个字节,我就会得到一个unicode心:
BYTE bytes[3] = { 0 };
[utf8 getBytes:bytes length:3];
NSString* decoded = [[NSString alloc] initWithBytes:bytes length:3 encoding:NSUTF8StringEncoding];
NSLog(@"%@",decoded); // ❤
请注意,我以心脏为例;我尝试了许多表情符号,大多数在UTF8中为4个字节,但其中一些为6。
我对UTF8有一些错误的假设吗?如何将4个字节的所有表情符号表示为UTF8?