考慮以下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