2011-03-02 10 views
0

pythonとtkinterがUnicode文字を正しく処理しています。tkinterがUnicode文字を正しく表示できない

しかし、ユニコード符号化文字を正しく表示することはできません。

私はUbuntuでPython 3.1とtkinterを使用しています。私はタミル語のユニコード文字を使用しようとしています。

すべての処理が正しく行われます。しかし、ディスプレイは間違っていますか?ここで

の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のようなモダンなものを使用するようお勧めします。あなたのプロジェクトが成長したら、あなたは感謝します。 –

+0

@static_rtti:なぜですか? tkinterは非常にうまくスケーリングする上級言語です。 –

+0

どちらの場合も同じフォントフェイスを使用していることは確かですか?もちろん、使用しているフォントにグリフがない場合は、正しく表示されず、すべてのフォントにUnicode文字が含まれているわけではありません。 –

答えて

2

コードなしでプログラムを診断するのは難しいです。コードを短くして問題を示すものがあるかどうか確認し、それを投稿してください。

私はタミル語の字形に慣れていないし、かなり小さいですが、スクリーンショットを見ると、すべての字形はそこにありますが、特定の字形が入れ替わっているようです。

(うーん、私はまだこのサイトの周りに私の方法を見つけること。これは、「コメント」ではなく、「答え」されている必要がありますね。)

0

Tkはマークを組み合わせることで、クラスゼロ」のようなものを誤操作されたように見えます」参照: http://www.unicode.org/versions/Unicode6.0.0/ch04.pdf#G124820(表4-4)

Iが正しく表示されない配列の一つはコードポイントであると仮定:0BC6に係るマークを合成reordrantクラスゼロで0BA9 0BC6(TAMIL音節NNNE)基本的にグリフがスワップされることを意味するUnicode標準に変換します。

これを修正する唯一の方法は、Tkバグトラッカーでバグを報告し、修正されることを期待することです。

+1

これを修正することは、おそらくタンジールを正確に表現するためには、パンゴやウィンドウズのようなものが必要になるでしょう。 – schlenk

0

私は他人のコメントと回答にコメントする方法がわからなかったので、ここで入力しています。

@ブライアンオークリーここではフォントは問題ではないとは思われますが、そのレンダリングは問題ありません。たとえば、2つのユニコード文字u0BAEとu0BC6を入力すると、 "ெெ"を表示する1つのタミール文字として結合する必要があります。しかし、私はレンダリングエンジンがいくつかのユニコード言語を表示するためにtkinterに存在しないと思います。

@Vamanaはい、インド語には、前述のように2つのユニコード文字を必要とする「組み合わせた1文字表記」があります。私が入力すると、charA、次にcharB、displayはcharBAのように単一の文字にレンダリングされるはずです。しかし、それはcharABを表示します(間違っています)。

@schlenkはい正しいです。私は最初にIDLEを使い、Linuxコンソールでpythonを実行しようとしましたが、どちらも表示のためにタミール語のテキストを間違って表示しました。それで私はtkinterにやって来た。今、それはまた無駄です。 私は現在ファイルIOを使用しています。今、私は、ブラウザが正しくレンダリングできるように、入出力用にPythonを使って簡単なWebページを作成する方法を学ぶべきだと思います。

1

私は同様の問題に直面しており、2つの文字を結合するようレンダリングエンジンに明示的に指示するためにゼロ幅結合(U + 200D)を使用したことを発見しました。それは2010年に働いていましたが、レンダリングエンジンが変更されたように見えますが(今私が気づいている)、2011年には、ジョイナを持つことで問題が生じています。 (それは私の作業コードを壊した)明示的なゼロ幅の参加者を削除して、コードが再び機能するようにしなければならなかった。お役に立てれば。