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

 
Saturday, September 02, 2006

유니코드(UTF-8) 문자에 번호(Code Point) 붙이기 [펄/Perl]


컴퓨터는 모든 문자에 일련번호를 붙여서 인식합니다. 유니코드 포맷에서는 16진수로 된 유니코드식의 번호(Code Point)가 붙습니다.

가령, 한글 낱자 "가"의 유니코드 번호는 U+AC00 입니다.

어떤 글자의 유니코드 번호를 알아내려고, 유니코드 레퍼런스를 일일이 뒤져보는 것은 너무 피곤한 일입니다.

그래서 유니코드 텍스트 파일의 각 문자들에 자동으로 Code Point를 붙여서 보여주는 스크립트를 펄(Perl)로 작성하였습니다.


유니코드 파일의 각 문자에, 문자번호(Code Point) 붙이기


uniview.pl
#!/usr/bin/perl
use strict; use warnings;


  &help if $#ARGV == -1;

  open  IN, "<:utf8", $ARGV[0] or die "$!\n";
  open OUT, ">:utf8", "out.txt" or die "$!\n";


  while (<IN>) {
    my @a = unpack("U*", $_);

    foreach my $s (@a) {
      printf OUT "%04X:%s\n", $s, chr($s);
    }
  }


  close IN;
  close OUT;




### 입력 파일을 지정하지 않았을 때, 도움말 출력하는 서브루틴
sub help {
  die <<TEXT;

Unicode Character Code Viewer:

        Usage:
                uniview.pl <UTF-8 input filename>

        Example:
                uniview.pl foo.txt

        Output (UTF-8):
                out.txt

TEXT
}

위의 코드를 uniview.pl 이라는 이름으로 저장합니다.



테스트용 파일


foo.txt
가나다라
안녕하세요.

ABCD

고개를 들어 보니, 머리 위로 희미한 햇빛이 비치고 있었다. 산길 위에 서서, 빗속의 먼 어딘가를 하염없이 바라보는 듯한 암울한 기분에서 헤어날 수 없었다.

冥王(めいおう)星を惑星から除外する国際天文学連合の決定で、太陽系の天体に新たな分類名がつけられたことを受け、日本学術会議は25日、新分類の和名を検討することを決めた。


이것은 테스트용으로 사용할 입력 파일입니다. 한글과 영문과 일본어가 뒤섞여 있습니다. (이 일본어는 한글 폰트 속의 가짜 일본어 글자들이 아닌 진짜 일본어입니다. 유니코드이기에 한글과 일본어가, 같은 파일에 동시에 존재할 수 있는 것입니다.) 위의 상자의 내용을 유니코드 텍스트 파일로 저장하되, 반드시 UTF-8 로 저장합니다.



이제 도스창(명령 프롬프트)에서,

uniview.pl foo.txt

라고 실행합니다. 그러면 out.txt 라는 유니코드(UTF-8) 파일이 '현재 디렉토리'에 자동으로 생성됩니다. (MS윈도에는 펄이 없으므로, 액티브펄(ActivePerl)을 설치해 주어야 실행됩니다.)

out.txt 의 내용은 다음과 같습니다:


실행 결과:


out.txt
AC00:가
B098:나
B2E4:다
B77C:라
000A:

C548:안
B155:녕
D558:하
C138:세
C694:요
002E:.
000A:

000A:

0041:A
0042:B
0043:C
0044:D
000A:

000A:

ACE0:고
AC1C:개
B97C:를
0020:
B4E4:들
C5B4:어
0020:
BCF4:보
B2C8:니
002C:,
0020:
BA38:머
B9AC:리
0020:
C704:위
B85C:로
0020:
D76C:희
BBF8:미
D55C:한
0020:
D587:햇
BE5B:빛
C774:이
0020:
BE44:비
CE58:치
ACE0:고
0020:
C788:있
C5C8:었
B2E4:다
002E:.
0020:
C0B0:산
AE38:길
0020:
C704:위
C5D0:에
0020:
C11C:서
C11C:서
002C:,
0020:
BE57:빗
C18D:속
C758:의
0020:
BA3C:먼
0020:
C5B4:어
B518:딘
AC00:가
B97C:를
0020:
D558:하
C5FC:염
C5C6:없
C774:이
0020:
BC14:바
B77C:라
BCF4:보
B294:는
0020:
B4EF:듯
D55C:한
0020:
C554:암
C6B8:울
D55C:한
0020:
AE30:기
BD84:분
C5D0:에
C11C:서
0020:
D5E4:헤
C5B4:어
B0A0:날
0020:
C218:수
0020:
C5C6:없
C5C8:었
B2E4:다
002E:.
000A:

000A:

51A5:冥
738B:王
FF08:(
3081:め
3044:い
304A:お
3046:う
FF09:)
661F:星
3092:を
60D1:惑
661F:星
304B:か
3089:ら
9664:除
5916:外
3059:す
308B:る
56FD:国
969B:際
5929:天
6587:文
5B66:学
9023:連
5408:合
306E:の
6C7A:決
5B9A:定
3067:で
3001:、
592A:太
967D:陽
7CFB:系
306E:の
5929:天
4F53:体
306B:に
65B0:新
305F:た
306A:な
5206:分
985E:類
540D:名
304C:が
3064:つ
3051:け
3089:ら
308C:れ
305F:た
3053:こ
3068:と
3092:を
53D7:受
3051:け
3001:、
65E5:日
672C:本
5B66:学
8853:術
4F1A:会
8B70:議
306F:は
FF12:2
FF15:5
65E5:日
3001:、
65B0:新
5206:分
985E:類
306E:の
548C:和
540D:名
3092:を
691C:検
8A0E:討
3059:す
308B:る
3053:こ
3068:と
3092:を
6C7A:決
3081:め
305F:た
3002:。

000A:

000A:



각 문자에 해당하는 유니코드 코드 포인트가 나열되어 있습니다.


000A 는 개행문자를 의미하므로 빈 줄이 생기는 것이 정상입니다.
0020 이라는 곳에는 "공백 문자" 즉 스페이스가 있습니다. 그래서 보이지 않습니다.




▶▶ [Perl] 유니코드의 한글 낱자 11172자를 코드 번호와 함께 파일로 출력하기 - Unicode UTF-8

▶▶ Perl/펄] 한글 유니코드 코드 값(번호) 구하기 함수; Hangul Unicode Code Value



0 Comments:

Post a Comment

<< Home RSS 2.0 feed

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