什么是需要 UTF-16 代理项对的好的 Unicode 代码点?

What are good Unicode codepoints to test with requiring UTF-16 surrogate pairs?

ICU、Java、COM 和 CLR 等许多编程系统在处理过程中使用 UTF-16 对字符串数据进行编码。这些系统中的错误暴露相对困难,因为常用字符在基本多语言平面内,因此只需要一个编码单元进行 UTF-16 编码。

以前我用过表情符号字符,例如, 验证一切是否正常工作;但我遇到的情况是,有问题的解析器拒绝了非字母字符,因此断然拒绝了我尝试使用的表情符号。

我可以使用哪些 good/recognizable 各种 Unicode 类别中的示例来编写好的测试?

摩门教徒在 19 世纪开发的 Deseret alphabet 在 BMP 之外进行编码,但由在 Unicode 中被视为字母的字符组成,不同于其他一些古老的文字,例如乌加里特或埃及象形文字, Deseret 是一个大小写脚本,这意味着每个字母都有大写和小写变体。

Deseret Unicode block, U+10400 - U+1044F (PDF)

使用 Deseret 进行的测试揭示了 Java 处理 Unicode 的一些缺陷。例如,s1.equalsIgnoreCase(s2) 其中 s1 和 s2 是包含相同 Deseret 字母的大写和小写版本的字符串 returns false 因为 equalsIgnoreCase 方法不能正确处理代理项对。

编辑添加: 我刚刚通过查看 Unicode code charts: "Warang Citi", or as Wikipedia spells it, "Varang Kshiti", the script of the Ho language 发现了另一个。这是印度大约一百万人使用的一种语言的大小写脚本。

Warang Citi Unicode block, U+118A0 - U+118FF (PDF)

不区分大小写的古代文字通常也在 BMP 之外,例如 Lydian、Phoenician 和 Aramaic。