NSString 与 Unicode

经过半天的学习,总结下,NSString中Unicode的知识。

  1. **Unicode ** 通用字符编码 21位表示 17个平面 ,每个平面包括 65536 个字符 ,常用的是BMF 基本平面

  2. UTF8 用1到4个字节的码元表示对应的 unicode 码点,1-127号码元用一个字节表示,正好是ASCII码,并且有利于网络传输。

  3. **UTF16 ** 固定用 2 个字节(16bits)的码元,用1个或者两码元 ,表示unicode的21位的码字. 因此,一个码元由两个字节,所以存在字节序的问题。同时2个码元共32bits 表示21bits的unicode码字,有些浪费。在网络传输等过程中不太适用

  4. NSString length 本质是表示的UTF16编码的码元个数,由于有的特殊字符需要2个码元来表示,因此,NSString length 得到的个数存在和真实字符数不等的可能性

  5. 正规化 充分考虑不同国家不同文化的文字的不同,相同的含义完全可能用不同的 unicode ** 的码字表示。 为了便于比较,有时需要采用unicode 相容等价或者标准等价的方式 进行正规化处理。在NSString** 默认是不进行正规化处理的,因此在比较两个字符串是否字面和实际语义完全相同时,应该手动正规化之后,处理