6

Ruby を使用して、ターミナルに列形式で文字列を出力する必要があります。このようなもの:

| row 1     | a string here     | etc
| row 2     | another string    | etc

String#ljust と %s を使用して、ラテン UTF8 文字でこれをうまく行うことができます。

しかし、文字が韓国語、中国語などの場合に問題が発生します。韓国語などを含む行が英語の行に散在している場合、列は単に整列しません。

ここで列の配置を取得するにはどうすればよいですか? 固定幅フォントと同等のアジア文字を出力する方法はありますか? Vim で表示および編集することを意図したドキュメントについてはどうでしょうか?

4

2 に答える 2

3

CJK (中国語/日本語/韓国語)の全角文字とワイド文字で問題が発生します(図も下にスクロールします)。これらの文字は 2 つの固定幅セルを占有します。 String#ljustそして友人はこれを考慮に入れません。

Python にはunicodedata.east_asian_width、幅を意識した独自の ljust を記述できるものがありますが、Ruby には存在しないようです。私が見つけることができた最高のものは、このブログ投稿です: http://d.hatena.ne.jp/hush_puppy/20090227/1235740342 (機械翻訳). オリジナルの一番下の出力を見ると、思い通りに動作しているように見えるので、Ruby コードの一部を再利用できるかもしれません。

または、全角文字のみを印刷している場合 (つまり、半角と全角を混在させていない場合)、怠惰で、スペースやボックス描画を含むすべての文字を全角形式で使用することができます。コピーして貼り付けることができる文字は次のとおりです。

  • |(全角縦棒)
  •   (全角スペース)
  • - (全角ダッシュ; 私の端末フォントではうまく表示されません)
  • ー(別の全角ダッシュ)
于 2011-01-13T19:22:42.890 に答える
1

パーティーに遅れましたが、それでも役立つことを願っています: Ruby では、unicode-display_width gemを使用して、文字列の東アジア幅を確認できます。

require 'unicode/display_width'
"⚀".display_width #=> 1
'一'.display_width #=> 2
于 2013-12-11T08:45:45.743 に答える