Tkinter条目获取unicode内容错误

时间:2018-04-20 09:26:25

标签: python tkinter unicode-string tkinter-entry

我有一个奇怪的问题,试图从Tkinter条目中获取一些值。基本上,如果在条目中我有一个no-ascii值并使用get()内容,有时我有一个正确的unicode字符串,有时我有和ascii字符串a-la unicode没有规范的'u'。这是我的代码:

def create():
    try:
        cols = []
        values = []                
        for name in names:
            if (pk <> name):
                if (name in fk_columns):
                    cols.append(name)
                    values.append(box[name].get())
                else:                        
                    cols.append(name)
                    values.append(entry[name].get())                        
        print values                        
        dbutils.create(mDBname, mTable,cols,values)
        frame.master.destroy()
        tkMessageBox.showinfo("New record", "Record created") 
        scrolled_view(root,mDBname,mTable,'g',0, editable)           
    except Exception, err:
        tkMessageBox.showerror("Error", err)           

def update():
    try:
        cols = []
        new_values = []
        old_values = []
        i = 0
        for name in names:
            if (name in fk_columns):
                cols.append(name)
                new_values.append(box[name].get())
            else:                        
                cols.append(name)                    
                new_values.append(entry[name].get())                                       
            if rows[record][i] == None:
                old_values.append('')
            else:
                old_values.append(rows[record][i]) 
            i = i + 1
        print new_values 
        dbutils.update(mDBname, mTable, cols, new_values, old_values)
        frame.master.destroy()
        tkMessageBox.showinfo("Update", "Record updated")
        scrolled_view(root,mDBname,mTable,'g',0, editable)            
    except Exception, err:
        tkMessageBox.showerror("Error", err) 

所以问题是如果我使用“创建”功能并且我有一个带有值的条目,例如“JohnCanà”,当我在shell中打印值时(在调用dbutils之前注意“打印值”)我得到了:

[u'John Can\xe0', 'Amministrazione'] 

并且该功能正常工作。

当我使用更新功能时,甚至只更新第二个值而不是python shell上的“JohnCanà”(在调用dbutils之前调用print new_values),我得到了:

['17', 'John Can\xe0', 'Marketing']

字符串'John Can \ xe0'没有'u'。这最终产生了经典错误“序数不在128范围内。所以我的问题为什么同一个Entry.get()调用会产生这种不同的行为以及如何解决它。提前感谢!

2 个答案:

答案 0 :(得分:0)

我不确切知道这是不是你要找的东西,我告诉你到目前为止测试的行为:

>>> name = u'John Can\xe0'
>>> name = bytes(name,"unicode_escape")
>>> name.decode('unicode_escape')
'John Canà' # This is the output

为避免字符串中的\xe0,请在显示任何字符串

之前进行转换

答案 1 :(得分:0)

问题是由于sqlalchemy原始查询:当我创建记录(插入)时,该条目正确地将文本处理为unicode(没有纯字符串):

u'John Can\xe0'

基本上更新时,我做一个原始选择(通过sqlalchemy)来填充条目和值

'John Can\xe0' 

来自原始选择。添加

'?charset=utf8' 

连接字符串解决了问题。 唯一没有问题的是Tkinter Entry正确处理“John Can \ xe0&#39;而不是提出错误。顺便说一句,现在代码工作了!