使用Ruby,我必须以列式格式输出字符串到终端。像这样:
| row 1 | a string here | etc
| row 2 | another string | etc
使用String#ljust和%s,我可以使用拉丁文UTF8字符做得很好。
但是当字符是韩文,中文等时会出现问题。当英文行中散布着包含韩文等的行时,列就不会对齐。
如何在此处获得列对齐?有没有办法输出相当于固定宽度字体的亚洲字符?如何在Vim中显示和编辑文档?
答案 0 :(得分:3)
您的问题发生在CJK(中文/日文/韩文)full-width and wide characters上(也向下滚动图表);这些字符占据两个固定宽度的单元格。 String#ljust
和朋友们不考虑这一点。
Python中有unicodedata.east_asian_width
,它允许你编写自己的宽度感知ljust,但它似乎不存在于Ruby中。我能找到的最好的是这篇博文:http://d.hatena.ne.jp/hush_puppy/20090227/1235740342(machine translation)。如果你查看原始底部的输出,它似乎可以做你想要的,所以也许你可以重用一些Ruby代码。
或者如果你只是打印全角字符(即你没有混合半宽和全宽),你可能会很懒,只需使用全宽形式的所有内容,包括间距和方框画画。这里有几个你可以复制和粘贴的字符:
答案 1 :(得分:1)
晚会,但希望仍然有用:在Ruby中,您可以使用unicode-display_width gem来检查字符串的东亚宽度:
require 'unicode/display_width'
"⚀".display_width #=> 1
'一'.display_width #=> 2