위에서 만든 프로그램을 리눅스에서 먼저 만들었습니다.
이유는 프로그래밍하기에
윈도우보다 리눅스가 더 좋은 환경이기 때문입니다.^^
그렇게 프로그램을 만들고나서
윈도우에서도 확인하고자
ActivePerl과 EasyEclipse for LAMP를 설치하였습니다.
그리고 관련 라이브러리를 받아 실행시켜보았습니다.

완전히 깨져서 나오더군요.
왜 그런가 찾아보니
해당 소스 파일이 UTF8으로 적혀있었습니다.
그래서 이것을 ANSI(정확하게는 cp949)로 저장했습니다.
그러자 또 하나의 문제가 발생했습니다.
정규표현식에서 한글을 썼는데,
이글루스가 UTF8인지라 검색이 되지 않는 것입니다.
따라서 이 문제를 해결하고자 이리저리 찾아다녔습니다.
그러다 한 곳에서 답을 구할 수 있었습니다.
'perl 에서 utf-8을 euc-kr로 컨버팅 하려면?'
찾아보니 Encode 모듈을 이용해서 변환하는 것을 알았지만,
저렇게 해야함을 알았습니다.
예제를 만들어보았습니다.
#!/usr/bin/perl
use strict;
use warnings;
use Encode;
print "Hi. I'm NoSyu.\n";
print "こんにちは. 私は NoSyuです.\n";
print "안녕하세요. NoSyu입니다.\n\n";
print encode("euc-kr", decode("utf-8", "Hi. I'm NoSyu.\n"));
print encode("euc-kr", decode("utf-8", "こんにちは. 私は NoSyuです.\n"));
print encode("euc-kr", decode("utf-8", "안녕하세요. NoSyu입니다.\n\n"));
__END__
위의 소스를 ANSI로 적혀진 소스를 실행시켰습니다.

위에서 잘 나옵니다.
즉, 따로 처리할 필요없이 그냥 'print'함수를 쓰면 됩니다.
하지만 소스를 UTF8로 적혀진 소스를 실행시켰습니다.
이제는 밑의 것이 잘 나옵니다.
위의 소스에 나오는 함수 encode와 decode는
이런 함수로 파악하였습니다.
encode - 두 번째 파라메터인 문자열을
첫 번째 파라메터의 문자셋으로 바꾼 8진수를 반환.
decode - 두 번째 파라메터인 8진수를
첫 번째 파라메터의 문자셋으로 바꾼 문자열을 반환.
하지만 조금 이상합니다.
소스를 보면 decode에 들어가는 파라메터는 문자열이고,
encode가 반환하는 것은 문자열입니다.
즉, 함수 설명에서는 8진수가 들어가야하는데,
소스에서는 문자열이 쓰이고 있습니다.
이는 Perl이 문자열을 자동으로 8진수로 바꾸는건지
해당 함수가 그렇게 처리하는지 잘 모르겠습니다.
아무튼 위의 함수를 써서
UTF8 문자셋으로 적혀진 Perl 파일을 실행시켜
DOS 환경에서 제대로 실행시켰습니다.

깔끔하게 잘 되는군요.^^
PS
이러나저러나 영어는 잘 나오는군요.
(정확하게는 알파벳..)
영어 잘 하는 사람은 좋겠습니다.(응??)
PS2
중국어도 테스트하려고 하였으나,
'Hello. I'm NoSyu.'를 번역한 '?好. 我是NoSyu.'을
AcroEdit가 인식하지 못하는 문자가 있어 제외하였습니다.
(번역 사이트 : http://babelfish.altavista.com/tr)
참조
- C에서 가변 배열(Variable-Length Array) (8)2008/03/22
- 정규표현식 |은 순서대로 매치 (2)2007/11/28
- 정규표현식 룩어라운드(lookaround) (3)2007/11/26
- UTF8 Perl 소스, 명령 프롬프트(cmd.exe)에서 한... (7)2007/09/29
- 이글루 백업 프로그램 - 배포는 어떻게 하지? (10)2007/09/29
- NoSyu에게 있어 프로그래밍의 시작과 끝 (2)2007/09/27
- Perl OOP 쓰기 힘들다. (10)2007/08/12
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.









댓글을 달아 주세요
우엉.. 컴퓨터 잘 다루는 사람 보면 부러워요
/이녁/
전 이녁님처럼 좋은 글 쓰는 사람 보면 부러워요.ㅜㅜ
Acroedit 를 쓰시는군요.
참고로 Acroedit 는 UTF-8 을 제대로 지원하지 못합니다. 그런 이유로 중국어가 제대로 나오지 않는 것 같습니다.
/Mr.Dust/
네.. 도서관에서 작업하면서 윈도우에 돌아가는 공개용 소프트웨어를 찾다보니
Acroedit가 그나마 좋더군요.^^
몇 가지 아쉬운 점이 있기에 메모장 대신으로 쓰고 있습니다.^^
Acroedit는 UTF-8을 제대로 지원하지 못하는군요.
그럼 다른 프로그램을 써야하겠는데,
Mr.Dust님은 무엇을 쓰시나요??
저는 PSPAD 를 쓰다가 요즘은 Notepad++ 를 씁니다.
물론 둘다 공개소프트입니다. 전자는 프리웨어로 기능이 막강합니다만, 가끔 오류가 있었고, 후자는 그럭저럭 쓸만한 기능에 오픈소스입니다. 뭐 그럭저럭이라고 해도.. FTP 연결기능과 컬럼 편집 기능이 없는 정도뿐이지만요. 그래도 컬럼 편집 기능이 없는건 치명적 ㅠ.ㅡ
/Mr.Dust/
아.. 해당 프로그램을 쓰신다고 하셨죠.^^;;;;
(제가 기억력이 나빠서....)
제가 Acroedit를 쓰는 이유 중 하나가 바로 FTP 연결 기능 때문입니다.
동아리 서버에 접속해서 작업해야 하는 경우가 있거든요.^^;;
PSPAD를 한 번 살펴봐야겠습니다.
정보 고맙습니다.ㅜㅜ
위에 질문에 대한 답변으로 이런 글을 발견하였습니다.
1. Perl 프로세스 외부에서 파일,표준입력,소켓등의 I/O 통해 받아들이는 문자열은 단순히 옥텟열이다.
2. 옥텟열이 어떤 인코딩을 사용하고 있느냐를 알려줘서 그것을 Perl 내부유니코드포멧으로 변환하는 것이 Encode모듈의 decode 함수다.
http://aero.springnote.com/pages/1053508