tkinter无法正确显示unicode字符
python和tkinter正在处理unicode字符。tkinter无法正确显示unicode字符
但他们无法正确显示unicode编码的字符。
我在Ubuntu中使用Python 3.1和tkinter。我正在尝试使用泰米尔语unicode字符。
所有处理都正确完成。但显示是错误的?
这是错误的显示在Tkinter的
这里是正确的显示(如在gedit中)
是否有人可以在这方面的帮助?
很难诊断没有代码的程序。看看你是否可以将代码简化为表示问题的简短内容,然后发布。
我对泰米尔字形不熟悉,它们非常小,但是看截图,它看起来像所有的字形都在那里,但某些字形正在交换,对吧?
(嗯,我想这应该是一个“注释”,而不是“答案”。仍然发现我的方式解决这个网站。)
它看起来像Tk是处理不当的事情像“类零组合标记”,请参阅: http://www.unicode.org/versions/Unicode6.0.0/ch04.pdf#G124820(表4-4)
我假定不正确显示序列中的一个是码点:0BA9 0BC6(TAMIL SYLLABLE NNNE),其中0BC6是reordrant类零组合根据标记到Unicode标准,这基本上意味着字形被交换。
解决此问题的唯一方法是在Tk bug跟踪器中提交一个错误,并希望它得到修复。
修复它可能是一项相当艰巨的任务,需要类似于pango或相当于正确呈现泰米尔语的窗口。 – schlenk 2011-03-02 20:51:00
由于我无法/不知道如何评论他人的评论和答案,我在这里打字。
@Bryan Oakley我不认为字体是这里的问题,但它的渲染是。例如,当我键入两个Unicode字符u0BAE和u0BC6时,它应该组合为显示“ெெ”的单个泰米尔字符。但我认为渲染引擎并不存在于tkinter中用于显示一些unicode语言。
@Vamana是的,印度语言有'组合单字符记法',需要两个unicode字符,如上所述。当我输入时,比如charA,那么charB,显示器应该渲染成单个字符,比如charBA。但它显示了charAB(这是错误的)。
@schlenk是的你是对的。我最初使用IDLE,然后尝试在Linux控制台中运行python,都错误地显示淡米尔文本。因此我来到tkinter。现在,这也是徒劳的。 我目前正在使用文件IO。现在我想我应该学习如何使用python制作一个简单的网页来输入和输出,以便浏览器能正确呈现。
我曾遇到过类似的问题,并发现我使用了Zero Width Joiner(U + 200D)来明确地告诉渲染引擎加入两个字符。过去在2010年工作,但看起来像渲染引擎已经发生了变化(我现在知道),现在在2011年,我发现有木工造成的问题! (它打破了我的工作代码)我不得不删除明确的零宽度的加入者,让我的代码再次工作。希望这可以帮助。
我无法直接回答你的问题,但我建议你放弃tkinter并使用像PyQt这样的现代代替。当你的项目增长时,你会感激不尽。 – 2011-03-02 11:02:37
@static_rtti:为什么? tkinter是一种非常好的语言。 – 2011-03-02 11:57:30
您是否确定在两种情况下都使用相同的字体?当然,如果您使用的字体没有字形,它将显示不正确,并且并非所有字体都具有所有Unicode字符。 – 2011-03-02 12:02:56