2011-01-13 8 views
6

Rubyを使うと、文字列を端末に出力する必要があります。Ruby:東アジアの幅(Unicode)を確認する

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

String#ljustと%sを使用して、ラテン語のUTF8文字でこれを行うことができます。私はここに列の配置を取得できますか

しかし、問題は文字が韓国語を含む行が点在英語の行があるとき、列は単に揃わないだろうなど、中国の韓国語のときに生じる、など

?固定幅フォントに相当するアジア言語の文字を出力する方法はありますか? Vimで表示および編集するためのドキュメントはどうですか?

+2

vimを使用すると、アジアンテキスト用のダブル幅フォントを選択できる ''guifontwide''設定があります。 – Benoit

+1

あなたの言葉の選択は非常に悪いです。アジアは、多くの国、言語、ライティングシステムを持つ非常に大きな場所です。 – koan

+0

@dan韓国語/中国語/ ... {アジア言語}言語のみ、または 'len()'が1より大きい任意の文字(たとえば '' ')には問題があります。そうであれば、テキストの実際の長さを取得するには、vim-strで 'len(str、 '\ zs')の代わりに' len(str) '(vim-7.2、' strwidth(str) 7.3)。 – ZyX

答えて

1

、うまくいけば、まだ役に立つ:Rubyでは、あなたは文字列の東アジア幅をチェックするためにunicode-display_width gemを使用することができます。

require 'unicode/display_width' 
"⚀".display_width #=> 1 
'一'.display_width #=> 2 
3

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

Pythonにはunicodedata.east_asian_widthがあります。これはあなた自身の幅認識ljustを書くことができますが、Rubyでは存在しないようです。私が見つけた最高のものは、このブログ記事です:http://d.hatena.ne.jp/hush_puppy/20090227/1235740342machine translation)です。オリジナルの一番下にある出力を見ると、あなたが望むことができるように思えるので、Rubyコードの一部を再利用することができます。

半角と全角を混ぜて使用しない場合(つまり、半角と全角を混ぜて使用しない場合)は、怠け者になり、スペースやボックス描画。私の中できれいにレンダリングされません。(全角ダッシュ - (全角スペース)

  • (全角垂直バー)
  • |

    • :ここでは、コピーして貼り付けることができますカップルの文字がありますターミナルのフォント)
    • ー(別の全角ダッシュ)相手に後期
  • +0

    あなたの 'strwidth'関数がこの文字でどのように動作するかテストしました。' strwidth( "|") 'は2ではなく1を返します。しかし、ルビーの幅をチェックする方法はわかりません。 – ZyX

    +0

    あなたの以前のコメントを読んで、Vim 7.3の 'strwidth'関数を参照していると思いますか?それから、明らかに全角文字を考慮に入れません(あなたが印象を受けた場合は^^)。私が投稿した縦棒は、どんな場合でも全幅です。 –

    +0

    @Jo Liss私は実際には全角文字を考慮に入れていると言っています(通常のバーまたはutf-8のテーブル境界では1を返します)。 – ZyX

    関連する問題