본문 바로가기
컴퓨터/디버깅2

유니코드로 작업시 ? 는 정말로 ? 인가?

by adnoctum 2014. 4. 16.




   unicode 로 작업을 하거나 unicode 로 되어 있는 자료를 다루는 작업을 할 경우 상황에 따라 글자가 깨져서 ? 로 표시되는 경우가 많다, 아주 많다, >.<"" 아주아주 골머리가 아픈데, 우선 가장 먼저 확인해 보아야 하는 것은 ? 가 정말로 글자가 깨져서 나온 것인지 아니면 ascii code 63번, 정말로 물음표 ? 인지 확인하는 것이다. terminal 로 리눅스 서버에 접속해서 작업하는 경우에도 terminal 의 encoding 의 조건에 따라 멀쩡히 잘 있는 글자가 ? 로 표시될 수도 있으니 이 부분도 주의를 해야 한다. 즉, 같은 데이터를 wordpad.exe 로 열어서 확인했을 때는 정상으로 나오는데 terminal 에서 display 가 될 때는 ? 가 표시가 되는데 또 terminal 을 통해서 서버에서 파일 처리를 한 결과 자체는 정상, 이런 경우도 있을 수 있다, 나에겐 있었지... 


   그럼, ? 가 정말로 ? 인지 아니면 글자가 깨져서 생긴 ? 인지는 어떻게 확인할까? 간단하게는 hexdump 를 이용하는 것이다. 





위는 실제로는 rtf 파일인데 내가 확장자를 임의로 변경한 것이다. vi 와 메모장, visual studio text editor 에서 열어 보았을 때 전부 ? 로 나왔는데, 그래도 이게 여전히 ? 인지 글자가 깨진 것인지 알 수 없어서 결국 byte-code 를 직접 확인하기 위해 저렇게 해 보았다. 다른 프로그램으로 열었을 때 31057 부근에 ? 가 나왔었기 때문에 그 부분을 잡아서 표시를 해 보았다. terminal 에 display 된 ? 자체는 믿을 수 없고 (오른쪽에 u-31057? 에서의 ?), 왼쪽 column 들에서 3f 를 믿을 수 있다. 즉, ascii code 가 0x3f, 정말로 물음표 ? 가 맞다. 



   hexdump 자체는 linux 용 프로그램인데 윈도우즈용도 어딘가에 있을 것이다, 아주 간단한 것이니까. delphi 에서는 ocx 자체에 hexdump 용 control 이 있어서 예전엔 만들어 썼던 기억이 있다. 






왜 vi, 메모장, visual studio text editor 에서 전부 ? 로 나왔는데도 ? 가 ? 라고 믿지 못하는가? 그것은... 현재 OS 가 영어, vi, 메모장, VS2010 전부 영어, 하여튼 한글이 default 가 아닌 모든 프로그램이 전부 영어로 설치되어 있다. 심지어 '한글' 프로그램을 설치할 때 한국어 언어팩이 있어야 한다고 그것 다운로드 받으라고 해서 그렇게 한 후 설치할 수 있었다. 맥북도 상황은 같은데, 맥에서 한글을 써서 작업한 ms-word 파일을 윈도우즈에서 열면 죄다 깨진다. 쳇. terminal 에 display 되는 ? 는 믿을 게 못 된다는 것은 여러 번 경험. 지금 메모장에선 한글도 안 써진다, 죄다 네모로 나온다. 또한 지금 다루는 데이터는 한글, 한문이 섞여 있는데, 한문도 code page 하나로 표시가 안된다, 워낙 방대한 양의 한자가 있어서. 그러다보니 오만가지 unicode 가 사용되었다. 다루는 데이터도, 프로그램들도 이런 상황에서 ? 를 ? 라 쉽게 믿긴 힘들다..., >.<""