2017-11-17 1 views
1

처음 128 자의 ASCII 문자 중 어떤 것이 인쇄 가능하고 인식 가능한 문자인지 보여주는 짧은 스크립트 (자습서 용)를 작성하려고합니다.ASCII 테이블 인쇄를 위해 보이지 않는 ASCII 문자를 중화하지 않습니다.

`사용하여 다음 스크립트는 '부분적으로 작동 string.printable에 있지만 여전히

내가 함정에 추가하고 다음을 대체 할 수 있습니다 하나 또는 두 줄 이상인가 등, 줄 바꿈 같은 것들 떨어져 트리거링 테이블을 멋지게 보이게하고 인쇄 가능한 문자를 표시 할 수 있도록 공백 문자를 제어 하시겠습니까?

는 멍청한 놈 - 가독성을 위해 긴 형식을 글 :

import string 
lines = [] 
for i in range(8): 
    line = [] 
    for j in range(16): 
     k = i + j *16 
     thing = chr(k) 
     if thing not in string.printable: 
      thing = ' ' 
     line.append(thing) 
    lines.append(line) 

for line in lines: 
    print "".join(line) 

IDLE :

enter image description here

복사/네 공백을 포함하여 SE에 붙여 넣습니다

[email protected]`p 
    !1AQaq 
    "2BRbr 
    #3CScs 
    $4DTdt 
    %5EUeu 
    &6FVfv 
    '7GWgw 
    (8HXhx 
     )9IYiy 

*:JZjz 
+;K[k{ 
,<L\l| 

- = M] m} > N^N ~ OP의 의견에 따라 인쇄 할 수없는 문자를 대체 할 /O_O

+1

하여 출력하고 처리를 처리 할 수있는 경우 [유니 코드] (http://www.unicode.org/charts/nameslist/), [제어 사진] (HTTP : //www.unicode.org/charts/nameslist/c_2400.html) 블록은 대체 문자로 유용합니다. –

+0

@TomBlodget [특히 신비한 소유 아포스트로피] (https://apple.stackexchange.com/q/204296/143729)로 고생하고 나면 경증의 경우 * 유니코도 포비아 *가 발생했습니다. 아무 것도 아닌데, 컨트롤 사진 블록은 매우 흥미로웠다. 그리고 나는 그것을 염두에 둘 것이다. 정보 주셔서 감사합니다! – uhoh

답변

1

업데이트 코드입니다.?.

from string import printable, whitespace 

replace_ch = ' ' # The character to replace non-printable characters with 
whitespace_ch = ' ' # The character to replace whitespace characters with 

# For console output 
out_width = 8 
out_height = 16 

chars = [chr(i) for i in range(128)] 
# Replace whitespace characters 
chars = [whitespace_ch if c in whitespace else c for c in chars] 
# Replace non-printable characters 
chars = [c if c in printable else replace_ch for c in chars] 
# Form lines for printing 
lines = [[chars[i + j * out_height] for j in range(out_width)] for i in range(out_height)] 

for line in lines: 
    print(''.join(line)) 

출력 :

[email protected]`p 
    !1AQaq 
    "2BRbr 
    #3CScs 
    $4DTdt 
    %5EUeu 
    &6FVfv 
    '7GWgw 
    (8HXhx 
)9IYiy 
    *:JZjz 
    +;K[k{ 
    ,<L\l| 
    -=M]m} 
    .>N^n~ 
    /?O_o 

대안들이 제어 문자로 정의됩니다 단순히 ASCII의 처음 32 개 문자를 방지하는 것입니다. 문자 ord(c), c을 확인하는 것이 더 효율적일 수 있습니다.

+1

그래, 교체 문자를 '.'로 설정했습니다. 그 (것)들을 위해 나타나기 위하여, 그러나 저것은 약간 펑키하다. 문자를 알아 내려면 잠깐만 기다려주세요 ... – Shayn

+0

ASCII 테이블의 문자 9에서 13까지는 문자가 공백 문자로 공백 문자로 바뀝니다. 당신이 언급 한 코멘트에 관해서는, 나는 그것을 볼 수 없습니다, 그것은 삭제되었을 수도 있습니다. – Shayn

+1

내가 추가했습니다! 너가 그 때 행해져 야 한대로 나는 나의 선을 설치하기 위하여려고하고있다 – Shayn

1
import string 

columns = [] 
height = 10 
whitespace_map = { 
    '\t': 'TAB', 
    '\n': 'LF', 
    '\r': 'CR', 
    '\x0b': 'VT', 
    '\x0c': 'FF', 
} 

i = 0 
j = height 
while i < len(string.printable): 
    column = string.printable[i:j] 
    columns.append(column) 
    i += height 
    j += height 

k = 0 
while k < height: 
    for column in columns: 
     if k > len(column): 
      break 
     c = column[k] 
     if c in string.whitespace and c != ' ': 
      c = whitespace_map[c] 
      # Alternative: c = ' ' 
     print('{: <5}'.format(c), end='') 
    print() 
    k += 1 

인쇄 :

0 a k u E O Y ) = { 
1 b l v F P Z * > | 
2 c m w G Q ! + ? } 
3 d n x H R " , @ ~ 
4 e o y I S # - [ 
5 f p z J T $ . \ TAB 
6 g q A K U % / ] LF 
7 h r B L V & : ^ CR 
8 i s C M W ' ; _ VT 
9 j t D N X ( < ` FF 
+1

매우 매력적인 테이블! – uhoh

+1

이것은 더 유익한 대답입니다. 둘 다 받아 들일 수 있기를 바랍니다. 'string.whitespace'를 찾아 주셔서 감사합니다! – uhoh

+0

[이 댓글] (https://stackoverflow.com/questions/47341255/#comment81653449_47341255)이 재미 있습니다! – uhoh

관련 문제