Python Tkinter无法在Manjaro中正确显示Unicode字符

Python Tkinter无法在Manjaro中正确显示Unicode字符,python,tkinter,unicode,manjaro,tamil,Python,Tkinter,Unicode,Manjaro,Tamil,python和Tkinter正在正确处理Unicode字符 但它们无法正确显示Unicode编码的字符 我在Ubuntu中使用Python3.1和Tkinter。我正在尝试使用泰米尔语Unicode字符 所有处理都正确完成。但是显示器是错的 这是Tkinter中的错误显示 以下是正确的显示(如gedit中所示) 仍未解决: from tkinter import * root = Tk() root.geometry('200x200') var = StringVar() label =

python和Tkinter正在正确处理Unicode字符

但它们无法正确显示Unicode编码的字符

我在Ubuntu中使用Python3.1和Tkinter。我正在尝试使用泰米尔语Unicode字符

所有处理都正确完成。但是显示器是错的

这是Tkinter中的错误显示

以下是正确的显示(如gedit中所示)


仍未解决:

from tkinter import *
root = Tk()
root.geometry('200x200')
var = StringVar()
label = Label( root, textvariable=var, relief=RAISED )
Entry(text="Placeholder text").pack()
var.set("கற்றதனால் ஆய பயனென்கொல் வாலறிவன்\nநற்றாள்தொழாஅர் எனின்.  ")
label.pack()
root.mainloop()
曼哈罗:

窗口:

看起来Tk对“零级组合标记”之类的事情处理不当,请参见: (表4-4)

我假设其中一个不能正确显示的序列是代码点:0BA9 0BC6(泰米尔语音节NNNE),其中0BC6是根据Unicode标准重新绘制的类零组合标记,这基本上意味着符号被交换


修复它的唯一方法是在Tk bug跟踪器中提交一个bug,并希望它得到修复。

看起来Tk在处理诸如“零级组合标记”之类的错误,请参见: (表4-4)

我假设其中一个不能正确显示的序列是代码点:0BA9 0BC6(泰米尔语音节NNNE),其中0BC6是根据Unicode标准重新绘制的类零组合标记,这基本上意味着符号被交换


修复它的唯一方法是在Tk bug跟踪器中提交一个bug,并希望它得到修复。

我曾经遇到过类似的问题,发现我使用了零宽度Joiner(U+200D)来显式地告诉渲染引擎连接两个字符。这在2010年是可行的,但看起来渲染引擎已经发生了变化(我现在知道了),现在在2011年,我发现使用joiner会产生问题!(它破坏了我的工作代码)我必须删除显式的零宽度joiner才能让我的代码再次工作。希望这能有所帮助。

我曾经遇到过类似的问题,并发现我使用了零宽度连接器(U+200D)来显式地告诉渲染引擎连接两个字符。这在2010年是可行的,但看起来渲染引擎已经发生了变化(我现在知道了),现在在2011年,我发现使用joiner会产生问题!(它破坏了我的工作代码)我必须删除显式的零宽度joiner才能让我的代码再次工作。希望这有帮助。

根据

根据


我无法直接回答您的问题,但我建议您放弃tkinter,改用PyQt等现代产品。当你的项目成长时,你会感激的。@static\u rtti:为什么?tkinter是一种很好的语言,它的伸缩性非常好。您确定在这两种情况下使用的字体相同吗?当然,如果您使用的字体没有字形,它将显示不正确,并且并非所有字体都有unicode字符。OP在回答时说|@Bryan Oakley我认为字体不是问题所在,但它的渲染是错误的。例如,当我键入两个Unicode字符u0BAE和u0BC6时,应将其组合为一个泰米尔字符显示“மெ". 但我认为Tkinter中不存在用于显示某些Unicode语言的渲染引擎。我无法直接回答您的问题,但我建议您放弃Tkinter,改用PyQt之类的现代工具。当您的项目发展壮大时,您会很感激的。@static\u rtti:为什么?Tkinter是一种很好的语言,可以很好地扩展。您确定自己e在这两种情况下都使用相同的字体?当然,如果你使用的字体没有字形,它会显示不正确,并且不是所有的字体都有unicode字符。OP在回答中说|@Bryan Oakley我不认为字体是问题所在,但它的呈现是问题所在。例如,当我键入两个unicode字符u0BAE和u0BC6时,它会显示错误uld可组合为一个泰米尔字符显示“மெ“。但我认为Tkinter中不存在用于显示某些Unicode语言的渲染引擎。修复它可能是一项相当艰巨的任务,需要类似pango或windows的等价物来正确渲染泰米尔语。同样,修复它可能是一项相当艰巨的任务,需要类似pango或windows的等价物来渲染泰米尔语没错,我也是?
from PyQt5.QtWidgets import QApplication,QMainWindow,QLabel
import sys
app=QApplication(sys.argv)
app.setStyle('Fusion')
app.setApplicationName('PyQt5 App')
win=QMainWindow()
label=QLabel()
text='கற்றதனால் ஆய பயனென்கொல் வாலறிவன்\nநற்றாள் தொழாஅர் எனின்.'
label.setText(text)
win.setCentralWidget(label)
win.show()
sys.exit(app.exec_())