考虑以下Ruby代码分析一个三字节的UTF-8字符串:计数Unicode字符串长度而不组合标记
#encoding: utf-8
s = "\x65\xCC\x81"
p [s.bytesize, s.length, s, s.encoding.name]
#=> [3, 2, "é", "UTF-8"]
如上所述on this page of mine上述真的是两个字符的字符串:拉丁小写e
其次是Combining Acute Accent。然而,它看起来像一个字符,这在布置固定宽度显示器时很重要。
例如,看一下上this directory listing两个条目为“moiré.svg”并注意其中一人搅乱了列对齐。
如何计算Ruby中字符串的“等宽视觉长度”,该字符串不包含任何零宽度组合字符? (一个有效的技术可能转化为Unicode字符串转换成其规范的表达方式,转向到上述"\xC3\xA9"
这也像é
但有1
一个length
。)
你有哪个版本的Ruby?我尝试了你的例子,并得到了[3,3,“é”]'。 – 2012-04-05 01:46:19
@IliaFrenkel上面提到了Ruby 1.9,其字符串的编码为UTF-8。我编辑了代码,以显示UTF-8不是默认的任何系统上的独立脚本所需的魔法注释。 – Phrogz 2012-04-05 01:47:30