编码

参考:ASCII,Unicode、UTF-8

https://objccn.io/issue-9-1/

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000

unicode码

unicode码表示 U+F8FF 可以用 \uF8FF即为unicode编码 F8FF即为这个字符的16进制表示

多个字符的unicode码可以组合为一个新的字符 例如\ud83c\udf49可以组合为🍉,一个可扩展的字形群是一个或多个可生成人类可读的字符 Unicode 标量的有序排列。

补充:
注意:
SwiftOC不同,swift中将每个字符都看作可扩展的字形群,因此对于é("\u{65}\u{301}")看作一个字符,而对于OC这是两个字符,而对两者说字符串长度就是字符的数量

可扩展的字符群集可以组成一个或者多个 Unicode 标量。这意味着不同的字符以及相同字符的不同表示方式
可能需要不同数量的内存空间来存储。所以 Swift 中的字符在一个字符串中并不一定占用相同的内存空间数
量。因此在没有获取字符串的可扩展的字符群的范围时候,就不能计算出字符串的字符数量。如果您正在处理一
个长字符串,需要注意characters属性必须遍历全部的Unicode标量,来确定字符串的字符数量。
另外需要注意的是通过characters属性返回的字符数量并不总是与包含相同字符的NSStringlength属性相同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码