전산쟁이 C에서의 한글지원 문제 2009/10/02 01:59 by 준경군

요즘 갑자기 유니코드 처리에 관한 궁금증이 생겨서 이런저런 문서들을 뒤적거리면서 내용을 살펴보는 중인데, C 표준(정확하겐 'C99'를 지칭) 자체가 유니코드 제대로 지원하지 않고 있다는 사실을 처음 알았습니다. (정확하겐 처리방법을 통일시키지 못했다는게 맞는 말이겠네요.)

물론 gcc나 msvc와 같은 컴파일러에서 한글 지원이 원활하게 되는 것 처럼 보이기는 합니다. 헌데 이건 컴파일러 제작자들이 임의적인 방법으로 추가한 내용일 뿐, 표준에서 명시하고 있는 내용은 아니라고 하더군요. 따라서 gcc와 msvc의 구현 방법이 다릅니다. 심지어는 wchar_t의 크기 자체도 gcc는 4바이트, msvc는 2바이트로 크기에서 엿볼 수 있듯 gcc는 L"문자열"을 UCS-4로 인코딩 하고 있으며, msvc는 UCS-2를 사용하는 서로 다른 모습을 보여주고 있습니다.

이러한 문제 때문인지 wchar_t의 사용이 그닥 권장되는 상황은 아닌듯 합니다. 더군다나 소스코드를 UTF-8로 저장하고 한글을 사용하면 Visual Studio 2008에서 읽고, 저장하는덴 문제가 없다가도 컴파일시 아래와 같은 경고문을 볼 수 있습니다.

warning C4819: The file contains a character that cannot be represented in the current code page (949). Save the file in Unicode format to prevent data loss

물론 결과물에서 한글은 모조리 깨져서 나오더군요. (스읍~)

나름의 편법(?)으로 소스코드상에서는 영어만 쓰고, 프로그램 내에서 한글 처리가 필요한 경우에는 자체 인코더를 만들어서 사용하는게 좋을거 같네요. 뭐... 그래도 만약을 대비해서 인코더랑 디코더 정도는 만들어놓으면 유용하게 써먹을 수 있을듯...?

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://ssmim101.egloos.com/tb/2439581 [도움말]

덧글

  • 홈쥬인 2009/10/04 18:50 # 답글

    C에서 왜 한글코드에 대해 문제삼나여~~ C언어는 한글코드가 생기기 전 부터 있던 언어고 윤의코드는 아예 시스템마다 처리방법이 달라서 그런거라능~ C잘못 아니라능... 왜 우리 C욕하냐능!!!
  • 준경군 2009/10/04 20:14 #

    C 표준이 유니코드 처리방법에 대한 합의를 이끌어내지 못함에 대한 아쉬움일 뿐 잘잘못을 따지자는건 아닙니다.
    그리고 전 아직 C가 좋아염..
  • 홈쥬인 2009/10/04 22:41 #

    난 키워질 하는거라능~~ 유니코드를 문자열상수로 쓰면 컴파일러마다 컴파일하는게 다 달라서 고생할거라능~~ 나도 오예스 만들다 보니 환장하고 싶다능~~ 지금은 내부적으로 완성형 윤의코드 변환해서 쓰게 해놨다능 아놔 열여덟;
  • 준경군 2009/10/05 03:11 #

    윤희코드면 그런게 어느정도 가능한데 euc-kr은 정말 맵핑 테이블 아니면 답이 없더만요. -_-
    이걸 굳이 만들어야 하는지 극심하게 고민 중.
덧글 입력 영역