如何对Entry组件的StringVar进行编码?
Tkinter Entry非ASCII字符取值/编码解决办法
先搞对取值方式
别用str()去套StringVar对象,那只会拿到对象的内存描述,根本不是输入的文本。正确操作是调用StringVar的get()方法:
# 示例代码 from tkinter import Tk, Entry, StringVar root = Tk() input_var = StringVar() entry_box = Entry(root, textvariable=input_var) entry_box.pack() # 获取输入的内容 input_text = input_var.get()
这时候拿到的input_text,在Python3里就是标准的str类型(本身就是Unicode格式,支持所有非ASCII字符);在Python2里是unicode类型,也能直接处理多语言字符。
编码处理(解决ASCII编码报错)
如果要把文本转成字节串(比如存文件、传网络),直接用encode()方法指定utf-8编码就行——别用默认的ASCII,这就是你报错的根源:
# Python3/Python2通用的UTF-8编码 encoded_text = input_text.encode('utf-8')
要是遇到特定场景需要其他编码(比如GBK),替换成对应的编码名称就行,但优先用UTF-8,兼容性最强。
踩坑提醒
- 绝对别直接对StringVar实例用
str(),比如str(input_var),这得到的是类似<tkinter.StringVar object at 0x...>的无效内容,不是输入文本。 - 报错
'ascii' codec can't encode...就是因为系统默认编码设成了ASCII,显式指定UTF-8编码就能绕开这个问题。
内容的提问来源于stack exchange,提问作者Hùng Cường
相关产品推荐
相关产品推荐

