[Python] 바이트형(bytes, b”)의 문자열 변환(decode)

bytes

파이썬에는 1바이트를 저장하는 bytes 자료형이 있다. print함수로 bytes를 출력하면 b’~~~~’와 같이 출력된다.

b'\x00\x00'

decode

어떤 함수는 문자열이 bytes로 출력된다. bytes로 출력된 문자열을 우리가 이해하려면 영문이나 한글 등으로 변환해야한다. 이때 bytes를 유니코드로 변환해주는 decode()함수를 사용한다.

deocde()의 역은 encode()다.

아래 process.stdout.readline()의 출력 결과는 bytes형이다. 따라서 우리가 이해할 수 있게 출력 결과를 decode했다.

cmd = 'ping 172.20.1.1'
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)

while True:
    line = process.stdout.readline()
    print(line.decode('cp-949'))
    if not line:
        break

decode함수의 인자는 인코딩 방식이다. euc-kr 등 여러 방식이 있지만 파이썬은 기본적으로 utf-8을 지원한다 따라서 decode()는 decode(‘utf-8’)과 같다. 한글을 출력해야한다면 콘솔에 설정된 인코딩에 따라 cp949나 euc-kr을 이용해야할 수 있다.

decode를 사용하지 않고 bytes로 출력

b'\r\n'
b'Ping 172.20.1.1 32\xb9\xd9\xc0\xcc\xc6\xae \xb5\xa5\xc0\xcc\xc5\xcd \xbb\xe7\xbf\xeb:\r\n'
b'\xbf\xe4\xc3\xbb \xbd\xc3\xb0\xa3\xc0\xcc \xb8\xb8\xb7\xe1\xb5\xc7\xbe\xfa\xbd\xc0\xb4\xcf\xb4\xd9.\r\n'
b'\r\n'

decode를 사용하여 유니코드로 출력

Ping 172.20.1.1 32바이트 데이터 사용:
요청 시간이 만료되었습니다.
요청 시간이 만료되었습니다.

Leave a Comment