Perl Unicode 烹饪书:通过图形反转字符串

℞ 32:通过图形反转字符串

因为字节和字符在 Unicode 中不是同构的——你可能看到用户可见的字符(一个 图形)不一定是一个 Unicode 字符串中的单个码点——每个字符串操作都必须意识到码点和图形之间的区别。

考虑 Perl 内置的 reverse。通过码点反转字符串会弄乱变音符号,错误地将 crème brûlée 转换为 éel̂urb em̀erc 而不是 eélûrb emèrc;因此,通过图形来反转。

作为一个选项,使用 Perl 的 \X 正则表达式元字符 从字符串中提取图形,然后反转这个列表

 $str = join("", reverse $str =~ /\X/g);

作为另一个选项,使用 Unicode::GCString 将字符串视为图形序列,而不是码点

 use Unicode::GCString;
 $str = reverse Unicode::GCString->new($str);

这两种方法都适用于字符串的任何规范化形式。记住,\X 只有从 Perl 5.12 开始及其之后才是最可靠的。

上一节:℞ 31:用图形而不是码点提取(substr)

系列索引:标准前言

下一节:℞ 33:图形中的字符串长度

标签

反馈

这篇文章有什么问题吗?请通过在 GitHub 上打开问题或拉取请求来帮助我们。