找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

Unicode 11.0 核心规范笔记

Unicode 11.0 核心规范笔记
回复

使用道具 举报

大神点评(1)

oukuy 2024-8-24 13:23:19 显示全部楼层
深入解读Unicode 11.0的核心规范:字符与字符串设计的艺术

    在编程的世界里,字符和字符串的处理是关键。Unicode 11.0规范为我们揭示了四个核心概念:抽象字符、编码字符、分配字符和图元簇。字符类型如Rust中的unicode scalar value至少占用4字节,而Swift的Character则聚焦于用户感知,是图元簇,String默认按照图元簇处理,但可兼容UTF-8、UTF-16或UTF-32编码。Rust提供了底层的灵活性,Swift则以简洁易用为上。

    定义的微妙之处</
    Unicode字符的编码与ISO/IEC 10646同步,BMP区包含了大量常用的字符,从U+0000到U+FFFF。字符的区分并非简单,比如大写的İ(U+0130)和小写的ı(U+0131),不仅在大小上有所区别,还受书写方向影响。Unicode定义的是字符,但处理的是字符在不同语言环境中的复杂性,如搜索、排序和渲染。

    编码与类别</
    UTF-8、UTF-16和UTF-32等编码方式,各有特点,如C#、Java和JavaScript的字符串通常为16位code unit数组,可能包含不合法字符。Unicode划分为17个plane,包括BMP、SMP等,书写方向有多种,使用格式字符来指示。字符等效性通过NFD、NFC、NFKD和NFKC来管理,确保在安全场景下的一致性。Unicode code points的范围跨度极广,涵盖图形、格式、控制等七类,展示了字符的丰富多样性。


    深入剖析字符结构</
    图形字符(如字母、标点符号)是基础类别,而Mark类别则包括组合字符,如组合字符序列,它们以基字符(如标准韩语音节)或特定字符(如零宽度连接符)开始。缺陷在于,如果组合字符未附着在基字符上,序列就会被视为无效。

    Grapheme base和extender定义了字符组合的规则,Grapheme cluster则是文本处理中的基本单位,而Extended grapheme cluster则处理更复杂的文本组合。Unicode字符标签如U+E0000~U+E007F提供了代码表的概览。

    编码进阶</
    C++11引入了char16_t和char32_t,分别对应UTF-16和UTF-32,而C++17则淘汰了非标准的codecvt。使用UTF-8、UTF-16或UTF-32时,u8、u和U前缀提供了便利,而wchar_t的使用则因为非标准的字节大小而被推荐避免。
    Swift的Character类型虽然简洁,但缺乏上划大写的方法,转而使用'Str'。Unicode还定义了行和段分隔符,提供了一致的换行规则,编辑时根据字符组合的顺序进行不同操作。大小写转换受上下文和locale影响,可能不遵循简单的一律首字母大写规则,且大小写一致性难以保证。

    字符块与特殊用途</
    字符块描述了各种写作系统,包括标点符号和控制代码,比如ISO/IEC 2022兼容的C0和C1控制代码,以及那些保留特殊用途的字符。U+FFF9-FFFB用于文本标注,如音标,包含替换字符和特定的特殊字符区间。
回复 支持 反对

使用道具 举报

说点什么

您需要登录后才可以回帖 登录 | 立即注册
HOT • 推荐