2011-03-02 124 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年,我发现有木工造成的问题! (它打破了我的工作代码)我不得不删除明确的零宽度的加入者,让我的代码再次工作。希望这可以帮助。