我无法█
在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, "█")
谢谢你的帮助。
问题在于Pythoncurses
包只是ncurses C库的包装。在ncurses(https://linux.die.net/man/3/ncurses)中,字符表示为chtype(字符和属性数据),其中该字符是Cchar
类型,在普通系统上只是一个字节。
基础border
函数期望边框的每个字符都是一个字节,而您尝试使用的“ FULL BLOCK”是Unicode字符U + 2588或UTF-8字节字符串b'\xe2\x96\x88'
。这就是错误消息的原因:您尝试将3个字节的序列存储到一个单字节变量中。
它可以正常工作,addstr
因为该函数需要一个字符串并接受3个字节的序列。但是它会与addch
期望的单个字符串中断。
换句话说,curses模块将不接受多字节UTF-8序列,除非它期望使用字符串。
可能的解决方法:
curses
Python模块的推荐方法是找到符合您要求的单字节编码。Latin1(ISO-8859-1)甚至是ncurses的默认设置,但是其他编码可以更好地满足您的需求。0x2588
一个字符值,或者更普遍地接受仅具有16位代码点的任何字符,这仅仅是Unicode的基本多语言平面。不幸的是,我不知道。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句