mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Saturday, July 29, 2006

펄/Perl] 윈도우용 유니코드(UTF-16LE) 파일 읽고 쓰기, 16비트 유니코드 입출력


펄에서는 내부적으로 UTF-8 유니코드를 사용하는데, MS윈도에서는 UTF-16LE를 사용합니다. (LE라는 것은 리틀 엔디안(little-endian)이라는 뜻임)

그래서 펄에서 윈도우용 유니코드 파일을 읽고 쓰는 데 어려움이 있었는데, 오늘 다행히 해결을 했습니다.


다음의 예제는 아주 간단한 것입니다. UTF-16LE 유니코드로 된 in.txt 라는 텍스트 파일을 읽어서, 그것을 UTF-16LE 유니코드 포맷으로 out.txt 라는 새 파일에 쓰는 것입니다. 이 예제를 실행하기 위해서는 윈도의 메모장 등으로 in.txt 라는 이름의 유니코드 파일을 하드에 만들어 두어야 합니다.

#!/usr/bin/perl
use strict; use warnings;

my $UNICODE  = "UTF-16LE"; # 유니코드 종류 지정
my $in_file  = "in.txt";   # 입력 유니코드 파일
my $out_file = "out.txt";  # 출력 유니코드 파일

  open IN, "<:encoding($UNICODE)", $in_file or die "$!\n";
  binmode(IN) or die "Can't binmode to $UNICODE: $!\n";

  open OUT, ">:encoding($UNICODE)", $out_file or die "$!\n";
  binmode(OUT) or die "Can't binmode to $UNICODE: $!\n";


  foreach (<IN>) {
    print OUT $_;
  }

  close(IN);
  close(OUT);



명령 프롬프트 화면으로는 UTF-16LE 를 출력할 수 없었습니다. 화면상으로도 글자들이 깨지고, 재지향(Redirection)을 해도 여전히 깨졌습니다.

유니코드는 화면으로 출력하는 것이 힘들더군요. 그래서 출력을 파일로 저장하는 쪽을 택했습니다.


그런데 이렇게 간단한 것은 되는데, 좀 복잡한 작업에 적용하니 역시 한글이 깨지는 문제가 있었습니다. 다만 영문은 잘 되었습니다.


※ 위의 예제에 일반 아스키 파일을 입력하면, 즉 in.txt 가 유니코드가 아닌 아스키 파일이라면, out.txt 도 그냥 아스키 파일로 출력됩니다.


▶▶ 일반 유니코드(Unicode)와 'UTF-8 유니코드'의 차이점

▶▶ 한글 텍스트 문서를, 유니코드(Unicode / UTF-8) 로 변환하기




tag: perl
Perl | 펄

2 Comments:
At September 6, 2006 at 2:59 PM, Anonymous Anonymous said...

펄로 윈도우에서 유니코드 이름을 가진 파일을 생성할 수 있나요?
그냥 했더니 $!에 Invalid argument만 들어가 있고..
도무지 모르겠네요.ㄱ-;

 
At September 6, 2006 at 4:21 PM, Blogger mwultong said...

지금 제가 해보니까 역시 잘 안되는군요.

원래 펄은 유닉스용인데, 유닉스에는 유니코드 파일명이 안되는 것으로 알고 있습니다... 그래서 펄로도 안되는 것 같군요
-_-;

 

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top