编码
unicode码
unicode码表示 U+F8FF
可以用 \uF8FF
即为unicode编码 F8FF即为这个字符的16进制表示
多个字符的unicode码可以组合为一个新的字符 例如\ud83c\udf49
可以组合为🍉
,一个可扩展的字形群是一个或多个可生成人类可读的字符 Unicode 标量的有序排列。
补充:
注意:
Swift
与OC
不同,swift中将每个字符都看作可扩展的字形群,因此对于é("\u{65}\u{301}")看作一个字符,而对于OC这是两个字符,而对两者说字符串长度就是字符的数量
可扩展的字符群集可以组成一个或者多个 Unicode 标量。这意味着不同的字符以及相同字符的不同表示方式
可能需要不同数量的内存空间来存储。所以 Swift 中的字符在一个字符串中并不一定占用相同的内存空间数
量。因此在没有获取字符串的可扩展的字符群的范围时候,就不能计算出字符串的字符数量。如果您正在处理一
个长字符串,需要注意characters
属性必须遍历全部的Unicode
标量,来确定字符串的字符数量。
另外需要注意的是通过characters
属性返回的字符数量并不总是与包含相同字符的NSString
的length
属性相同。 NSString的length属性是利用UTF-16表示的十六位代码单元数字,而不是 Unicode 可扩展的字符群集。作为佐证,当一个 NSString的length属性被一个Swift的String值访问时,实际上是调用了utf16Count
获取字符串中字符的unicode码
//其16进制就是字符‘的’的unicode码
unichar character = [@“的” characterAtIndex:0];
对于上面说的🍉这种多个unicode码组合字符 其index0位置为d83c index1位置为df49 由两个字符组成
iOS开发中用
unichar
是两字节长的char
,代表unicode
的一个字符
//将unicode码转为字符
NSLog(@"%@",[NSString stringWithCharacters:&character length:1]);
补充:
与char
的初始化相同 unichar a = '2'可以用单引号初始化unichar
不论char还是iOS开发中用的unichar 只能用上面的初始化方法初始化字符为ascii码