UTF8 Perl 소스, 명령 프롬프트(cmd.exe)에서 한글 출력 – v2

By | 2009/01/10

  Perl을 윈도우 명령 프롬프트(cmd.exe)에서 사용할 시 UTF8으로 소스파일을 인코딩 하였다면 한글이 제대로 출력되지 않습니다.

  여기에 대한 해결책으로 적은 글이 있습니다.

이글루스 백업 프로그램 윈도우에서 동작하게 하였습니다.

하지만 이 글을 토대로 해보니 제대로 동작하지 않아 새로운 방법을 찾아 해결하였습니다. 제가 찾은 방법을 여기에 적겠습니다.

1. use encoding ‘utf8’;을 쓰는 경우.

  권고사안이 아니기에 쓰지 말아야겠지만, 저 같이 필요한 경우에는 다음과 같이 하면 해결할 수 있습니다.

use encoding ‘utf8’, STDOUT=> ‘cp949’;

즉, 뒤에 , STDOUT=>’cp949’라고 Standard Output의 인코딩을 따로 cp949로 맞추면 됩니다. 그럼 거기에 맞춰 글이 제대로 출력됩니다.

한글이 제대로 출력되고 있는 화면

2. use encoding ‘utf8’;을 쓰지 않는 경우.

2-1. 명령 프롬프트 코드를 UTF8으로 바꿈.

  한글 윈도우의 경우 기본적으로 명령 프롬프트의 코드는 949입니다.

c6

chcp 명령어로 알아본 현재 활성 코드 페이지 번호

  이를 UTF8으로 바꾸면 됩니다. 바꾸기 전에 먼저 한글 폰트를 설정해야 합니다. 해당 프로그램에서 title-bar(위 그림에서 C:\WINDOWS\system32\cmd.exe가 적혀져 있는 곳)에 마우스 커서를 두고 오른쪽 버튼을 클릭하면 메뉴가 뜹니다. 거기서 속성을 클릭하면 속성 윈도우가 뜹니다.

c7

cmd.exe 등록정보 window

  여기서 글꼴 탭에 글꼴 부분에 ‘래스터 글꼴’ 대신 ‘굴림체’를 선택합니다. 이렇게 해야지 UTF8 상에서도 한글이 제대로 출력됩니다. 확인을 누르면 ‘속성 적용’ 확인 윈도우가 뜨는데 그냥 확인을 누릅니다.

c8

  그럼 위와 같이 window가 조금 바뀌게 될 것입니다. 이제 ‘chcp 65001’ 명령어로 code page를 UTF8으로 바꿉니다.

c9

  그럼 Active code page(현재 코드페이지)가 65001로 맞춰졌다고 나옵니다. 이제 Perl 프로그램을 실행시켜보겠습니다.

c10

  그럼 위처럼 한글이 나오고 있는 것을 확인할 수 있습니다. 하지만 이상하게도 제대로 나오지 않고 반복된 화면이 계속 나옵니다. 이 점이 황당하여 저는 사용하지 않습니다. (그런데 왜 적었지?..;;;)

참조 : http://openclose.egloos.com/1225834

2-2. decode 후 encode – 가장 좋음.

  기존에 제가 적었던 글에서 제공한 방법의 변형입니다. 기존에는 다음과 같이 하여 출력하였습니다.

   1: print encode("euc-kr", decode("utf-8", "안녕하세요. NoSyu입니다.\n\n"));

  하지만 위 방법으로는 제대로 동작하지 않는다는 것을 알았고, 고칠 것이 많아 은근히 귀찮았습니다. 따라서 use utf8;과 use Encode;로 새로운 module을 사용한 후 함수를 하나 만들었습니다.

   1: use utf8;
   2: use Encode;
   3:  
   4: # utf8 decode
   5: sub my_print($)
   6: {
   7:     my ($src) = @_;
   8:     utf8::decode($src);
   9:     print encode("cp949", $src);
  10: }

  즉, my_print라는 sub-routine을 만든 후 그 안에서 utf8으로 decode를 하여 문자열을 만든 후 이를 cp949로 encode하여 나온 옥텟으로 출력을 하게 하는 것입니다. 이렇게 한 결과 제대로 한글이 나오는 것을 확인하였습니다. 그리고 정규표현식들도 utf8으로 제대로 작동하고 있었습니다.^^

  저는 아직 Perl에 대해서 잘 모르기에 위의 방법 외에 다른 방법이 많을 것입니다.^^

참조

http://perlmania.kr/bbs/bbs.html?mode=read&table=windows&article=357&page=1

3 thoughts on “UTF8 Perl 소스, 명령 프롬프트(cmd.exe)에서 한글 출력 – v2

  1. 공미

    포르투갈어를 stdout 으로 뿌리는걸 잡아서 select box를 그리고 있었는데
    특정 글자가 깨져서 하루종일 삽질을 했네요.

    같은 방법으로
    use encoding ‘utf8’, STDOUT=> ‘utf8’;
    처리 했더니 감격스럽게도 되는군요.

    덕분에 밤 10:46분에 해당 작업 완료 했습니다.

    정말 감사합니다.

    Reply
    1. NoSyu

      반갑습니다.
      포르투칼어라… 전 전혀 모르는 미지의 세계군요.^^ㅜ

      첫 번째 방법이 유효하셨군요!
      이후 제가 살펴보니 소스 파일을 저장할 때 유니코드로 하면 저절로 된다느니 하는 얘기를 들었는데 명확한것인지 잘 모르겠습니다.OTL

      고생하셔서 얻은 팁 하나 공개해주셔서 고맙습니다.ㅜ

      Reply
  2. NoSyu

    이상하게도 이 글에 스팸 댓글과 트랙백이 집중되고 있기에 이 글에 댓글을 다는 것을 막습니다.
    여기에 대해서 얘기하고 싶으신 분은 방명록이나 이메일 부탁 드립니다.

    Reply

Leave a Reply