2017-10-25 5 views
3

Wikipedia page for Code Page 437에 따르면, 바이트 값 \x01에서 \x1f까지는 그래픽 문자 (예. b'\x01'은 ☺ '\u263A'과 같습니다. 하지만 그 decode가 생성하는 게 아니에요 : 파이썬 3.6하지만 2.7 CP437 디코딩이 제어 문자에 대해 손상 되었습니까?

>>> b'\x01'.decode('cp437') 
'\x01' 

모두 31 개 바이트 값에 대해 동일한 작업을 수행합니다.

+2

유니 코드가 제공하는 번역 테이블이 위키 피 디아와 일치하지 않는 것 같습니다 : ftp://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP437.TXT – tkausl

답변

4

\x01에서 \x1f까지의 바이트 범위와 관련된 그래픽이 있었지만 그래픽은 일부 컨텍스트에서만 사용되었습니다. 다른 문맥에서는 이러한 코드 포인트가 ASCII와 마찬가지로 제어 문자로 해석됩니다. IBM page on CP437 인용 '과 X'7F'X'1F을 통해 '

코드 포인트 X'01은 문맥에 따라 컨트롤이나 그래픽 될 수있다. 디스플레이의 경우 메모리에 매핑 된 비디오 디스플레이 버퍼의 16 진수 코드는 그래픽입니다. 프린터의 경우 그래픽스 컨텍스트는 데이터 스트림의 선행 제어 시퀀스에 의해 설정됩니다. 두 개의 제어 순서가 있습니다 : ESC X'5C '와 ESC X'5E'는 각각 문자 인쇄와 단일 문자 인쇄로 각각 지정됩니다. 다른 상황에서는 문제의 코드 이 대조로 사용됩니다.

파이썬의 CP437 디코딩은 제어 문자 해석을 사용하는 Unicode mappings on Unicode.org을 기반으로합니다.

"CP437 및 기타 DOS 형 코드 페이지의 특수 그래픽 문자에 대한 올바른 유니 코드 매핑 (01-1F, 7 층)"https://www.unicode.org/Public/MAPPINGS에서 사용할 수 있지만, 거기 파는 것은 단지로 매핑을 전환해야한다는 Unicode FAQ implies

제어 문자 및 여러 IBM 웹 사이트로 연결되는 page이 있습니다. IBM의 사이트를 파헤 쳐 보면 이 나타나며, - \x1f에 대한 그래픽 매핑은 IBM의 GCGID system으로되어 있지만 유니 코드는 아닙니다.

실제로 \x01에 대한 표준 유니 코드 매핑을 제공 IBM 또는 유니 코드, 하나에서, 공식 매핑이 있다면 나도 몰라 - CP437의 그래픽 해석의 관점에서 \x1f.

+0

내가 생각한 것, 참조를 찾지 못했습니다. 그래도. Windows 코드 페이지가 이상합니다. – tkausl

+0

환상적인 참고 자료, 감사합니다. 자신의 변환 표를 만드는 것 이외의 그래픽 문자를 얻을 수있는 방법이 있습니까? –

+0

@ MarkRansom : IBM의 GCGID와 관련하여 CP437 매핑을 제공하는 [IBM의 테이블] (ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00437.txt) 시스템이지만 유니 코드의 관점에서는 그렇지 않습니다. – user2357112