Python 3 curses中如何对.getstr()的输入使用.format()?
问题解答:curses.getstr()返回b'foo'而非foo的原因与解决方法
嘿,这个问题我之前玩curses库的时候也踩过坑!咱们一步步来拆解清楚:
为什么会出现b'foo'?
在Python 3里,curses.getstr()返回的不是普通的字符串(str类型),而是字节串(bytes类型)——这就是你看到输出带b前缀的原因。
Python 3严格区分了文本字符串(Unicode编码的str)和二进制数据(bytes),而curses库底层是基于C语言实现的,它直接处理原始的字节流,所以getstr()会返回未经解码的字节数据,前面的b就是字节串的标识。
怎么处理才能正常输出?
只需要把返回的字节串解码成Unicode字符串就行,最常用的是decode('utf-8')方法(如果你的终端用的是其他编码,比如GBK,就对应替换,但UTF-8是通用的首选)。
修改后的代码示例
咱们把你的演示代码调整一下,就能正常输出了:
import curses def main(scr): # 开启输入回显(默认可能关闭,方便看到自己输入的内容) curses.echo() # 获取输入并解码为字符串 input_str = scr.getstr().decode('utf-8') # 现在用format输出就不会有b前缀了 scr.addstr("你输入的内容是:{}".format(input_str)) scr.refresh() # 等待用户按键后退出 scr.getch() if __name__ == "__main__": curses.wrapper(main)
额外小提示
- 如果需要处理带特殊字符的输入,要确保解码时用的编码和你的终端编码一致,避免出现乱码问题。
- 注意:
getstr()本身并没有提供直接指定编码的参数,必须手动调用decode()方法来转换类型哦。
内容的提问来源于stack exchange,提问作者Lan Quil
相关产品推荐
相关产品推荐

