Saturday, September 02, 2006
유니코드(UTF-8) 문자에 번호(Code Point) 붙이기 [펄/Perl]
컴퓨터는 모든 문자에 일련번호를 붙여서 인식합니다. 유니코드 포맷에서는 16진수로 된 유니코드식의 번호(Code Point)가 붙습니다.
가령, 한글 낱자 "가"의 유니코드 번호는 U+AC00 입니다.
어떤 글자의 유니코드 번호를 알아내려고, 유니코드 레퍼런스를 일일이 뒤져보는 것은 너무 피곤한 일입니다.
그래서 유니코드 텍스트 파일의 각 문자들에 자동으로 Code Point를 붙여서 보여주는 스크립트를 펄(Perl)로 작성하였습니다.
uniview.pl
위의 코드를 uniview.pl 이라는 이름으로 저장합니다.
foo.txt
이것은 테스트용으로 사용할 입력 파일입니다. 한글과 영문과 일본어가 뒤섞여 있습니다. (이 일본어는 한글 폰트 속의 가짜 일본어 글자들이 아닌 진짜 일본어입니다. 유니코드이기에 한글과 일본어가, 같은 파일에 동시에 존재할 수 있는 것입니다.) 위의 상자의 내용을 유니코드 텍스트 파일로 저장하되, 반드시 UTF-8 로 저장합니다.
이제 도스창(명령 프롬프트)에서,
라고 실행합니다. 그러면 out.txt 라는 유니코드(UTF-8) 파일이 '현재 디렉토리'에 자동으로 생성됩니다. (MS윈도에는 펄이 없으므로, 액티브펄(ActivePerl)을 설치해 주어야 실행됩니다.)
out.txt 의 내용은 다음과 같습니다:
out.txt
각 문자에 해당하는 유니코드 코드 포인트가 나열되어 있습니다.
000A 는 개행문자를 의미하므로 빈 줄이 생기는 것이 정상입니다.
0020 이라는 곳에는 "공백 문자" 즉 스페이스가 있습니다. 그래서 보이지 않습니다.
▶▶ [Perl] 유니코드의 한글 낱자 11172자를 코드 번호와 함께 파일로 출력하기 - Unicode UTF-8
▶▶ Perl/펄] 한글 유니코드 코드 값(번호) 구하기 함수; Hangul Unicode Code Value
가령, 한글 낱자 "가"의 유니코드 번호는 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
}
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日、新分類の和名を検討することを決めた。
안녕하세요.
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:
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
tag: perl
Perl | 펄
tag: editor
텍스트 에디터 | 문서 편집기 | Text Editor
<< Home