我无法在python3 curses程序中使用█
。这是我的代码的一部分:
import curses
import locale
locale.setlocale(locale.LC_ALL)
locale.getpreferredencoding()
stdscr = curses.initscr()
caracter = str('█')
stdscr.border(
caracter, caracter, caracter, caracter,
caracter, caracter, caracter, caracter)
我收到此错误
OverflowError:字节不适合chtype
但是我可以使用addstr
函数编写类似utf-8的代码
stdscr.addstr(0, 0, "█")
感谢您的帮助。
问题是Python curses
包只是ncurses C库的包装。在ncurses(https://linux.die.net/man/3/ncurses)中,字符表示为chtype,(字符和属性数据),其中该字符是C char
类型,在常见系统上只是一个字节。
基础border
函数期望边框的每个字符都是一个字节,而您尝试使用的'FULL BLOCK'是Unicode字符U + 2588或UTF-8字节字符串border
。这就是错误消息的原因:您尝试将3个字节的序列存储到一个单字节变量中。
对于b'\xe2\x96\x88'
来说效果很好,因为该函数需要一个字符串并接受3个字节的序列。但它会与addstr
分开,后者需要一个字符串。
换句话说,curses模块将不接受多字节UTF-8序列,除非它期望使用字符串。
可能的解决方法:
addch
Python模块的推荐方法是找到符合您要求的单字节编码。 Latin1(ISO-8859-1)甚至是ncurses的默认设置,但是其他编码可以更好地满足您的需求。curses
作为字符值,或更普遍地接受仅具有16位代码点的任何字符,这仅仅是Unicode的基本多语言平面。不幸的是,我不知道。