红宝石:检查东亚宽度(Unicode)
-
10-10-2019 - |
题
使用Ruby,我必须以柱状格式输出字符串到端子。这样的事情:
| row 1 | a string here | etc
| row 2 | another string | etc
我可以使用字符串#ljust和%s使用拉丁UTF8字符来做到这一点。
但是,当角色是韩语,中文等时,就会出现一个问题。
如何在这里获得专栏对齐?是否有一种方法可以在固定宽度字体中输出亚洲字符?对于要在VIM中显示和编辑的文档怎么样?
解决方案
聚会迟到,但希望仍然有帮助:在Ruby,您可以使用 Unicode-display_width宝石 检查弦乐的东亚洲宽度:
require 'unicode/display_width'
"⚀".display_width #=> 1
'一'.display_width #=> 2
其他提示
您的问题发生在CJK(中文/日语/韩国) 全宽和宽阔的角色 (也向下滚动以获取图表);这些角色占据了两个固定宽度的单元格。 String#ljust
朋友不考虑这一点。
有 unicodedata.east_asian_width
在Python中,这将使您能够编写自己的宽度意识,但在Ruby中似乎并不存在。我能找到的最好的是这篇博客文章: http://d.hatena.ne.jp/hush_puppy/20090227/1235740342 (机器翻译)。如果您查看原件底部的输出,它似乎可以执行您想要的工作,因此也许您可以重复使用一些Ruby代码。
或者,如果您只打印全宽字符(即您不在一半的宽度和全宽度),那么您可能会很懒惰,只使用所有内容的全宽形式,包括间距和盒子绘图。这是您可以复制和粘贴的几个字符:
- |(全宽垂直杆)
- (全宽空间)
- -(全宽破折号;在我的终端字体中不能很好地渲染)
- ー(另一个全宽仪表板)
不隶属于 StackOverflow