回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在尝试从Tkinter条目获取一些值时遇到了一个奇怪的问题。基本上,如果在条目中我没有ascii值并使用get()内容,有时我有一个正确的unicode字符串,有时我有一个ascii字符串a-la unicode而没有规范的'u'。这里是我的代码:</p>
<pre><code>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)
</code></pre>
<p>所以问题是,如果我使用“create”函数,并且我有一个值为“John cana”的条目,当我在shell中打印值时(注意调用dbutils之前的“print values”),我得到:</p>
^{pr2}$
<p>而且该函数工作正常。在</p>
<p>当我使用update函数时,即使只更新第二个值而不是python shell上带有“John Can a”的值(在调用dbutils之前调用print new_values),我都得到了:</p>
<pre><code>['17', 'John Can\xe0', 'Marketing']
</code></pre>
<p>字符串“John Can\xe0”没有“u”。这最终产生了经典的错误“ordinal not in range 128”。我的问题是为什么一样入口.get()呼叫产生这种不同的行为以及如何解决它。提前谢谢!在</p>