3 バイトの UTF-8 文字列を分析する次の Ruby コードを検討してください。
#encoding: utf-8
s = "\x65\xCC\x81"
p [s.bytesize, s.length, s, s.encoding.name]
#=> [3, 2, "é", "UTF-8"]
私のこのページで説明されているように、上記は実際には2 文字の文字列です。ラテン語の小文字のe
後にCombining Acute Accentが続きます。ただし、1 文字のように見えるため、固定幅ディスプレイをレイアウトする際に問題になります。
たとえば、このディレクトリ リストの「moiré.svg」の 2 つのエントリを見て、そのうちの 1 つで列の配置が乱れていることに注意してください。
ゼロ幅の結合文字を含まないRubyの文字列の「モノスペースの視覚的な長さ」を計算するにはどうすればよいですか? (有効なテクニックの 1 つは、Unicode 文字列を正規表現に変換し、上記の文字列を のように"\xC3\xA9"
見えるが、の をé
持つようにする方法かもしれません。)length
1