1

タイ語の文字を含む文字列を右揃えにしたいと思います (タイ語のレンダリングは左から右には機能しませんが、上下にも移動できます)。

たとえば、文字列 ไป (2 文字、長さ 2) および ซื้อ (4 文字、長さ 2) の場合、次の出力 (長さ 5) が必要です。

...ไป

...ซื้อ

ナイーブ

print 'ไป'.decode('utf-8').rjust(5)

print 'ซื้อ'.decode('utf-8').rjust(5)

ただし、それぞれ生成します

...ไป

.ซื้อ

目的のフォーマットに到達する方法はありますか?

編集: タイ文字 tc の文字列が与えられた場合、文字列が使用する [場所/フィールド/位置/名前は何でも] の数を決定したいと思います。これは len(tc) と同じではありません。len(tc) は通常、使用される桁数よりも大きくなります。2 番目の単語は len(tc) = 4 になりますが、長さは 2 / 2 桁 / 2 桁です。

4

4 に答える 4

0

rjust() 関数は機能しないようで、文字列内のセルの数を自分で数える必要があります。次に、文字列の前に必要な数のスペースを挿入して、正当化することができます

あなたはタイ語に詳しいようです。子音、母音の前、母音の後ろ、およびタイ語の句読点の数を合計します。分音記号と上下の母音は数えないでください。

(疑似 Python コードを許してください)、

cells = 0

for i in range (0, len(string))
  if (string[i] == \xe31) or ((string[i] >= \xe34) and (string[i] <= \xe3a)) or ((string[i] >= \xe47) and (string[i] <= \xe4e))
     # do nothing
  else
     # consonant, preceding or following vowel or punctuation
     cells++
于 2016-02-12T22:38:09.393 に答える
0

あなたが尋ねたいのは、เรือ、ไป、ซื้อなどの「真の」文字数をどのように決定するかということだと思います(それぞれ3,2と2です)

残念ながら、Python がこれらの文字を解釈する方法は次のとおりです。

ไป

>>> 'ไป'
'\xe0\xb9\x84\xe0\xb8\x9b'
>>> len('ไป')
6
>>> len('ไป'.decode('utf-8'))
2

ซื้อ

>>> 'ซื้อ'
'\xe0\xb8\x8b\xe0\xb8\xb7\xe0\xb9\x89\xe0\xb8\xad'
>>> len('ซื้อ')
12
>>> len('ซื้อ'.decode('utf-8'))
4

เรือ</p>

>>> 'เรือ'
'\xe0\xb9\x80\xe0\xb8\xa3\xe0\xb8\xb7\xe0\xb8\xad'

>>> len('เรือ')
12
>>> len('เรือ'.decode('utf-8'))
4

表示される文字数と、文字列を構成する実際の (Python の観点からの) 文字数との間に実際の相関関係はありません。

これを行うための明白な方法は思いつきません。しかし、私はあなたに役立つかもしれないこのライブラリを見つけました。(いくつかの前提条件もインストールする必要があります。

于 2012-11-29T22:25:48.577 に答える