Python 对诅咒边框使用utf-8字符

Python 对诅咒边框使用utf-8字符,python,python-3.x,ubuntu-18.04,gnome-terminal,python-curses,Python,Python 3.x,Ubuntu 18.04,Gnome Terminal,Python Curses,我不能使用█带有边框的诅咒字符 代码示例: 导入诅咒 stdscr=curses.initscr() c=█' 标准边界(c,c,c,c,c,c,c,c,c,c) stdscr.getch() 我得到这个错误: 溢出错误:字节不适合chtype 但是,我可以使用addstr编写一些utf-8字符,如下所示: stdscr.addstr(0,0,”█") 感谢您的帮助。问题在于Pythoncurses包只是ncurses C库的包装器。在ncurses()中,字符表示为chtype(字符和属性

我不能使用
带有边框的诅咒字符

代码示例:

导入诅咒
stdscr=curses.initscr()
c=█'
标准边界(c,c,c,c,c,c,c,c,c,c)
stdscr.getch()
我得到这个错误:

溢出错误:字节不适合chtype

但是,我可以使用
addstr
编写一些utf-8字符,如下所示:

stdscr.addstr(0,0,”█")

感谢您的帮助。

问题在于Python
curses
包只是ncurses C库的包装器。在ncurses()中,字符表示为chtype(字符和属性数据),其中字符是C
char
类型,在通用系统中只是一个字节

底层函数希望边框的每个字符都是单字节,而您尝试使用的“完整块”是unicode字符U+2588或UTF-8字节字符串
b'\xe2\x96\x88'
。这就是错误消息的原因:您试图将3字节序列存储到单字节变量中

它适用于
addstr
,因为该函数需要一个字符串并接受3字节序列。但它会与
addch
中断,后者需要一个字符串

换句话说,curses模块将不接受多字节UTF-8序列,除非它需要字符串

可能的解决办法:

  • 使用底层ncurses库和
    curses
    Python模块的推荐方法是找到符合您需求的单字节编码。拉丁语(ISO-8859-1)甚至是ncurses的默认编码,但其他编码可以更好地满足您的需求
  • 在ncursesw周围查找(或编写)Python包装器。这是使用宽(16位)字符的ncurses的一个变体。它很乐意接受
    0x2588
    作为字符值,或者更一般地说,接受任何只有16位代码点的字符,这只是Unicode的基本多语言平面。不幸的是,我一个都不知道

>找到符合您要求的单字节编码。您能解释一下如何找到并使用这种编码格式吗?我添加了这行:
stdscr.encoding=“utf\u 8“
在我的程序中,它仍然会给我同样的错误。@AnchithAcharya:这个答案说utf_8不合适。如果你使用西欧语言,拉丁语(或ISO-8859-1)很好。但是你应该阅读上的维基百科页面,因为它涵盖了大量的语言。哦,我的错。我提到的页面是,它描述utf_8支持所有语言。我一定是误解了。无论如何,如果有帮助,我只是试着打印块字符和框边界字符。