나는 문자 그대로 다음 문자열로 변환 할 수 있습니다 방법 :문자열 리터럴 VT100 표현은 유니 코드로
token = "\x1b(0l\x1b(BHeader"
속으로 :
"┌Header"
나는 도서관에서 문자 유닉스 상자 그리기 문자를 수신 변환해야하고를 단위 테스트를위한 유니 코드
나는 문자 그대로 다음 문자열로 변환 할 수 있습니다 방법 :문자열 리터럴 VT100 표현은 유니 코드로
token = "\x1b(0l\x1b(BHeader"
속으로 :
"┌Header"
나는 도서관에서 문자 유닉스 상자 그리기 문자를 수신 변환해야하고를 단위 테스트를위한 유니 코드
이것은 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을 설정해야합니다.
@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")))
┌Header
나는 "문자 유닉스 상자 그리기 문자"들어 본 적이없는. 이것이 무엇인지에 대한 참고 자료가 있습니까? 표시 한 문자열에서 ESC 제어 문자 ('U + 1B')와 몇 가지 일반적인 ASCII 문자 ('(','0','1' 및'B')를 봅니다. – lenz