2012-11-29 114 views
1

我想右對齊包含泰文字符的字符串(泰文渲染不能從左到右運行,但也可以上下運行)。右對齊包含泰文字符的字符串

例如,對於琴絃ไป(兩個字符,長度2)和ซื้อ(4個字符,長度2)I希望有如下的輸出(長度5):

...ไป 

...ซื้อ 

天真

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

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

然而,分別產生

...ไป 

.ซื้อ 

任何想法如何得到想要的formattin G?

編輯: 給定一串泰文字符tc,我想確定字符串使用了多少個[位置/字段/位置/任何你想要調用它的地方]。這與len(tc)不一樣; len(tc)通常大於所用地點的數量。第二個字給len(tc)= 4,但長度爲2 /使用2個地方/使用2個職位。

+2

什麼語言/環境? – isturdy

+0

不清楚這個問題是關於什麼軟件/語言/環境。 – owagh

+0

看起來很美。 'import antigravity' - 是Python。 –

回答

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 

เรือ

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

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

有字符#之間顯示和實際的#沒有真正的相關性(從Python的角度來看)字符組成的字符串。

我想不出一個明顯的方法來做到這一點。不過,我發現這可能對你有幫助。 (你還需要安裝一些prequisites

+0

謝謝,Anuj Gupta。閱讀建議的圖書館功能,我不清楚他們會爲泰語工作;他們的重點是東亞語言。我認爲,我只是通過對相應的unicode表示進行分類來實現這樣一個真實長度的函數。 – user1864353

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++ 
0

原因

泰腳本包含普通字符(正超前寬度)和非間隔痕跡以及(零超前寬度)。

例如,在單詞ซื้อ

  1. 的第一個字符是聲母"SO SO"
  2. 那麼它有元音標記SARA UUE
  3. 然後音調標記MAI THO
  4. 然後最後的僞輔音O ANG

的問題是,上述的字符## 2和3在列表中是零寬度那些
換句話說,他們不會使字符串「更寬」。
換句話說,ซื้อ(「要買」)和ซอ(「小提琴」)將具有相等的兩個字符位置的寬度(但是相應地,字符串長度爲4和2)。

爲了計算「真正的」字符串長度,必須跳過零寬度的字符。

Python特定

unicodedata模塊可以訪問其中用於所有Unicode字符定義字符屬性Unicode字符數據庫(UCD)。包含在此數據庫中的數據是從UCD 8.0.0版編譯而來的。

unicodedata.category(unichr)方法returns下列之一General Category Values

  • "Lo"用於正常字符;
  • "Mn"零寬度無間距標記;

其餘顯而易見,只是過濾後者。


進一步信息: