2

[灵感主要来自于尝试解释Character Encoding 独立字符交换的问题,以及这些其他问题均不包含完整答案:How to reverse a Unicode string , How to get a reversed String (unicode safe)]

在 Unicode 中进行视觉字符串反转比看起来要困难得多。在 UTF-32 以外的任何存储格式中,您都必须注意代码点边界,而不是逐字节进行。但这还不够好,因为结合了字形;该规范有一个“字素簇”的概念,它更接近您想要反转的基本单位。但这还不够好;有各种特殊的大小写字符,如双向覆盖和最终形式,必须修复。

这个伪算法处理了我所知道的所有简单案例:

  1. 将字符串分割成单词和单词分隔符的交替列表(一些单词分隔符可能是空字符串)
  2. 颠倒此列表的顺序。
  3. 对于列表中的每个字符串:
    1. 将字符串分割成字素簇。
    2. 颠倒字素簇的顺序。
    3. 以相反的顺序检查初始和最终簇;它们的基本字符可能需要重新分配为正确的形式(例如,如果 U+05DB HEBREW LETTER KAF 现在位于序列的末尾,则需要变为 U+05DA HEBREW LETTER FINAL KAF,反之亦然)
    4. 将序列重新连接成一个字符串。
  4. 重新组合反转单词列表以生成最终反转字符串。

...但它不处理比迪烟,我敢肯定还有一些我不知道的东西。任何人都可以填补空白吗?

4

0 回答 0