如何正确地将阿拉伯语脚本插入到Tkinter文本小部件中?

时间:2014-01-08 12:01:06

标签: python tkinter arabic python-2.x

我有阿拉伯语句子/单词,我想插入我的Tkinter文本小部件。 但是,当我插入文本时,我看到以下结果:

enter image description here

以下是我要插入的字符串:'تاريخه' ,'تارِيخ'第一个被正确插入,第二个被findall()提取并在插入时出现乱码。

基本上我的所有代码(截图上的粗体文字)都很简单:

word = re.findall(u'word=.*', TEXT, re.UNICODE)[0] # searching for Arabic word and taking [0]
header = " ".join([QUERY, word]) # creating a varible to insert
text.insert('1.0', "".join([header,'\n'])) # inserting Arabic text

看起来re.findall()函数在TEXT中查找所有出现的'word=.*' regexp,并以unicode表示法检索word变量。

我在这里感到困惑。 我可以在插入文本小部件之前以某种方式转换 word吗?

1 个答案:

答案 0 :(得分:3)

正如您在评论中所说,TEXT已经被转义。更改生成TEXT的函数以正确返回字符串。

如果您无法控制生成文字的功能,请使用str.decode unicode_escape编码对文本进行取景。

>>> TEXT = u'word=\\u0631\\u064e\\u062c\\u0627'
>>> print TEXT
word=\u0631\u064e\u062c\u0627
>>> TEXT = TEXT.decode('unicode-escape')
>>> print TEXT
word=رَجا

实施例

# coding: utf-8

from Tkinter import *

root = Tk()
text = Text(root)
text.pack()

QUERY = u'\u0627\u0631\u062c\u0648'
TEXT = u'word=\\u0631\\u064e\\u062c\\u0627'  # escaped!!
TEXT = TEXT.decode('unicode-escape')
word = re.findall(u'word=.*', TEXT, re.UNICODE)[0]
header = " ".join([QUERY, word])
text.insert('1.0', "".join([header,'\n']))

root.mainloop()

enter image description here