2011-03-02 152 views
0

python和tkinter正在處理unicode字符。tkinter無法正確顯示unicode字符

但他們無法正確顯示unicode編碼的字符。

我在Ubuntu中使用Python 3.1和tkinter。我正在嘗試使用泰米爾語unicode字符。

所有處理都正確完成。但顯示是錯誤的?

這是錯誤的顯示在Tkinter的

wrong https://docs.google.com/leaf?id=0B7YA7kky_NEoM2U3MzI5NGUtNTk2NC00MzYzLTk1N2YtMTJjYTA0Yjc0MmE1&hl=en_GB&authkey=CKORhugK

這裏是正確的顯示(如在gedit中)

correct https://docs.google.com/leaf?id=0B7YA7kky_NEoNDBmMzYzOWEtMjY5Ny00NWM5LWE0MWYtMTg1ZDVhOGQ2MmEz&hl=en_GB&authkey=CPWhi74J

是否有人可以在這方面的幫助?

+0

我無法直接回答你的問題,但我建議你放棄tkinter並使用像PyQt這樣的現代代替。當你的項目增長時,你會感激不盡。 – 2011-03-02 11:02:37

+0

@static_rtti:爲什麼? tkinter是一種非常好的語言。 – 2011-03-02 11:57:30

+0

您是否確定在兩種情況下都使用相同的字體?當然,如果您使用的字體沒有字形,它將顯示不正確,並且並非所有字體都具有所有Unicode字符。 – 2011-03-02 12:02:56

回答

2

很難診斷沒有代碼的程序。看看你是否可以將代碼簡化爲表示問題的簡短內容,然後發佈。

我對泰米爾字形不熟悉,它們非常小,但是看截圖,它看起來像所有的字形都在那裏,但某些字形正在交換,對吧?

(嗯,我想這應該是一個「註釋」,而不是「答案」。仍然發現我的方式解決這個網站。)

0

它看起來像Tk是處理不當的事情像「類零組合標記」,請參閱: http://www.unicode.org/versions/Unicode6.0.0/ch04.pdf#G124820(表4-4)

我假定不正確顯示序列中的一個是碼點:0BA9 0BC6(TAMIL SYLLABLE NNNE),其中0BC6是reordrant類零組合根據標記到Unicode標準,這基本上意味着字形被交換。

解決此問題的唯一方法是在Tk bug跟蹤器中提交一個錯誤,並希望它得到修復。

+1

修復它可能是一項相當艱鉅的任務,需要類似於pango或相當於正確呈現泰米爾語的窗口。 – schlenk 2011-03-02 20:51:00

0

由於我無法/不知道如何評論他人的評論和答案,我在這裏打字。

@Bryan Oakley我不認爲字體是這裏的問題,但它的渲染是。例如,當我鍵入兩個Unicode字符u0BAE和u0BC6時,它應該組合爲顯示「ெெ」的單個泰米爾字符。但我認爲渲染引擎並不存在於tkinter中用於顯示一些unicode語言。

@Vamana是的,印度語言有'組合單字符記法',需要兩個unicode字符,如上所述。當我輸入時,比如charA,那麼charB,顯示器應該渲染成單個字符,比如charBA。但它顯示了charAB(這是錯誤的)。

@schlenk是的你是對的。我最初使用IDLE,然後嘗試在Linux控制檯中運行python,都錯誤地顯示淡米爾文本。因此我來到tkinter。現在,這也是徒勞的。 我目前正在使用文件IO。現在我想我應該學習如何使用python製作一個簡單的網頁來輸入和輸出,以便瀏覽器能正確呈現。

1

我曾遇到過類似的問題,並發現我使用了Zero Width Joiner(U + 200D)來明確地告訴渲染引擎加入兩個字符。過去在2010年工作,但看起來像渲染引擎已經發生了變化(我現在知道),現在在2011年,我發現有木工造成的問題! (它打破了我的工作代碼)我不得不刪除明確的零寬度的加入者,讓我的代碼再次工作。希望這可以幫助。