考虑以下分析三字节 UTF-8 字符串的 Ruby 代码:
#encoding: utf-8
s = "\x65\xCC\x81"
p [s.bytesize, s.length, s, s.encoding.name]
#=> [3, 2, "é", "UTF-8"]
正如我的这个页面上所描述的那样,上面确实是一个两个字符的字符串:拉丁小写e
,后跟Combining Acute Accent。但是,它看起来像一个字符,这在布置固定宽度的显示器时很重要。
例如,查看此目录列表中“moiré.svg”的两个条目,并注意其中一个条目是如何弄乱列对齐的。
如何计算 Ruby 中不包含任何零宽度组合字符的字符串的“等宽视觉长度”?(一种有效的技术可能是将 Unicode 字符串转换为其规范表示的方法,将上述转换为"\xC3\xA9"
看起来也像é
但具有length
of 的方法1
。)