我有一个奇怪的问题,试图从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()调用会产生这种不同的行为以及如何解决它。提前感谢!
答案 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;而不是提出错误。顺便说一句,现在代码工作了!