2

我想在控制台上渲染特殊的非 ASCII 字符,就像旧 DOS 程序中用于在终端中绘制窗口的字符一样。我特别想绘制他们在渲染窗口/对话框/表格时使用的字符,如下所示:

Norton Commander DOS 菜单

4

2 回答 2

3

您可以使用 Pythoncurses库,它是 *nix 系统上标准库的一部分,或者您可以使用Urwid,它是用于创建控制台界面的更高级别的库。

文档的常量段落包含有关如何在 X Emulators 中绘制特殊字符的信息(如果它们支持 VT100 继承的功能)。如果模拟器不支持这种替代字符集 - 使用 ascii 近似值。我想这就是你要找的。

于 2012-08-11T08:12:21.057 回答
3

这是直接打印到控制台的方法,尽管像这样的库curses肯定更容易。

弄清楚您的控制台支持哪些字符:

import sys
print('encoding =',sys.stdout.encoding)
print(bytes(range(256)).decode(sys.stdout.encoding)
encoding = cp437
 ☺☻♥♦
♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂Çüéâäà
åçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²
■

然后将它们打印为 Unicode 字符。确保将源文件保存为 UTF-8(Python 3 的默认值)或使用注释声明源文件中使用的编码。UTF-8 可以处理任何字符,但是如果您打印一个您的终端不支持的字符,您将在 3.6 之前的 Python 中得到一个。#coding: encodingUnicodeEncodeError

print('╔═╦═╗╓─╥─╖╒═╤═╕┌─┬─┐')
print('║ ║ ║║ ║ ║│ │ ││ │ │')
print('╠═╬═╣╟─╫─╢╞═╪═╡├─┼─┤')
print('║ ║ ║║ ║ ║│ │ ││ │ │')
print('╚═╩═╝╙─╨─╜╘═╧═╛└─┴─┘')
╔═╦═╗╓─╥─╖╒═╤═╕┌─┬─┐
║ ║ ║║ ║ ║│ │ ││ │ │
╠═╬═╣╟─╫─╢╞═╪═╡├─┼─┤
║ ║ ║║ ║ ║│ │ ││ │ │
╚═╩═╝╙─╨─╜╘═╧═╛└─┴─┘
于 2012-08-12T16:42:38.603 回答