이미지를 읽으면 왜 깨진 문자열이 나오는 것일까?

이미지를 메모장에서 열거나, 개발 언어로 읽어서 출력해 보면 깨진 문자열이 나옵니다. 이건 뭘까요?

이미지는 바이너리 데이터라고 부르는데요. 영어 뜻을 보면 오히려 쉽습니다. binary는 이진수라는 뜻이거든요.그러니까 이미지 파일은 이진수로 이미지를 표현하는 데이터죠.

사실 컴퓨터에겐 모든 게 이진수입니다. 텍스트 파일도 이진수로 문자를 표현하는 데이터입니다.

좀더 이해하기 위해 이진수와 그에 대한 해석을 살펴 봅시다.

UTF-8 캐릭터셋에서 a, b, c는 이진수로 각각 01100001, 01100010, 01100011로 표시됩니다.

그런데 같은 이진수가 BMP 이미지에서 진한 회색 점 하나를 의미합니다. BMP에선 각 숫자는 RGB 값을 표현하는데요. 이 이진수는 각각 97, 98, 99입니다. HEX(16진수)값으로 #616263인 색상이 되는 겁니다.

이제 이미지 바이너리를 UTF-8 문자 코드로 출력하면 외계어가 나오는 이유를 짐작할 수 있습니다.

색상을 의미하는 바이너리 데이터를 문자로 해석하는데, 이 때 이 이진수들이 문자가 할당되지 않은 이진수거나 거의 사용되지 않는 문자가 할당된 값인 거죠. 그래서 인간이 보기에는 완전히 엉뚱한 문자들이 튀어나오는 것입니다.

즉, 바이너리는 해석되기 전에는 바이너리일 뿐입니다. 바이너리가 프로그램을 만나 해석되면 비로소 사람에게 의미가 있는 무언가가 되는 것이죠. 이미지든 숫자든 그것은 해석된 결과지 데이터 그 자체는 0과 1의 조합일 뿐이라는 말입니다.

카테고리

대표글

댓글 남기기