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 라는 이름의 유니코드 파일을 하드에 만들어 두어야 합니다.
명령 프롬프트 화면으로는 UTF-16LE 를 출력할 수 없었습니다. 화면상으로도 글자들이 깨지고, 재지향(Redirection)을 해도 여전히 깨졌습니다.
유니코드는 화면으로 출력하는 것이 힘들더군요. 그래서 출력을 파일로 저장하는 쪽을 택했습니다.
그런데 이렇게 간단한 것은 되는데, 좀 복잡한 작업에 적용하니 역시 한글이 깨지는 문제가 있었습니다. 다만 영문은 잘 되었습니다.
※ 위의 예제에 일반 아스키 파일을 입력하면, 즉 in.txt 가 유니코드가 아닌 아스키 파일이라면, out.txt 도 그냥 아스키 파일로 출력됩니다.
▶▶ 일반 유니코드(Unicode)와 'UTF-8 유니코드'의 차이점
▶▶ 한글 텍스트 문서를, 유니코드(Unicode / UTF-8) 로 변환하기
그래서 펄에서 윈도우용 유니코드 파일을 읽고 쓰는 데 어려움이 있었는데, 오늘 다행히 해결을 했습니다.
다음의 예제는 아주 간단한 것입니다. 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);
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 | 펄
펄로 윈도우에서 유니코드 이름을 가진 파일을 생성할 수 있나요?
그냥 했더니 $!에 Invalid argument만 들어가 있고..
도무지 모르겠네요.ㄱ-;
지금 제가 해보니까 역시 잘 안되는군요.
원래 펄은 유닉스용인데, 유닉스에는 유니코드 파일명이 안되는 것으로 알고 있습니다... 그래서 펄로도 안되는 것 같군요
-_-;
<< Home