使用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代码。

或者,如果您只打印全宽字符(即您不在一半的宽度和全宽度),那么您可能会很懒惰,只使用所有内容的全宽形式,包括间距和盒子绘图。这是您可以复制和粘贴的几个字符:

  • |(全宽垂直杆)
  • (全宽空间)
  • -(全宽破折号;在我的终端字体中不能很好地渲染)
  • ー(另一个全宽仪表板)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top