如何转换以下字符串文字:
token = "\x1b(0l\x1b(BHeader"转入:
"┌Header"我从一个库接收文字Unix框绘制字符,并需要转换为unicode进行单元测试。
发布于 2017-12-31 12:26:28
这是VT-100备用字符集(在编辑问题主题之前不太明显)。序列esc ( 0将编码更改为备用集,序列esc ( B将其更改回。只有少数这样的字符映射。这是地图。
0 1 2 3 4 5 6 7 8 9 A B C D E F
6 ┘ ┐ ┌ └ ┼
7 ─ ├ ┤ ┴ ┬ │ 要进行转换,您必须设置一个dict,将这些代码映射到相应的Unicode代码点,并自己进行转换。
发布于 2017-12-31 22:48:32
@BoarGules是正确的。下面是我解码字符串的解决方案,如下所示:
vt_100_mapping = {
'0x71': '─',
'0x74': '├',
'0x75': '┤',
'0x76': '┴',
'0x77': '┬',
'0x78': '│',
'0x6a': '┘',
'0x6b': '┐',
'0x6c': '┌',
'0x6d': '└',
'0x6e': '┼',
}from itertools import groupby
def decode_vt_100(iterable, default_set='(B', alt_set='(0'):
for is_escape, group in groupby(iterable, lambda _: _ =='\x1b'):
if is_escape:
continue
characters = ''.join(group)
if characters.startswith(default_set):
yield characters[len(default_set):]
elif characters.startswith(alt_set):
for character in characters[len(alt_set):]:
yield vt_100_mapping[hex(ord(character))]>>> print(''.join(decode_vt_100("\x1b(0l\x1b(BHeader")))
┌Headerhttps://stackoverflow.com/questions/48039871
复制相似问题