[Perl] Perl에서 한글 글자 수 세기
[ CnUnix ] in KIDS
글 쓴 이(By): cycho (멋진척)
날 짜 (Date): 2000년 12월 5일 화요일 오전 02시 15분 00초
제 목(Title): [q] Perl에서 한글 글자수 세기
제목 그래로 순 한글로만 되어 있는 스트링 변수 $a가 있으면, 어떻게 해야 글자수를 세줄까요?
[ CnUnix ] in KIDS
글 쓴 이(By): terzeron (microkid)
날 짜 (Date): 2000년 12월 5일 화요일 오전 11시 47분 03초
제 목(Title): Re: [q] Perl에서 한글 글자수 세기
별 수 없을 것 같은데요…
$a = "한글이다.";
이런 건 5자인가요?
스트링변수의 인덱스를 하나씩 뒤로 옮기면서 해당 위치의 바이트가
한글 코드 범위에 있는 글자인지 확인하고, 그렇다면 2 바이트를 하나의
글자로 카운트 해야겠죠. 그게 아니면 1 바이트를 하나의 글자로
카운트하면 되겠구요.
#!/usr/bin/perl $a = "abc한글이다."; $count = 0; for ($i = 0; $i < length $a; $i++) { if (substr($a, $i, 1) =~ /[\177-\377]/) { $i++; } $count++; } print $count; print "\n";
댓글 4개
JEEN
use utf8;
플라그마를 사용했을 때.. 2바이트 문자를 한글자로 보게 됩니다.
my $msg = “한글이다.”;
print length $msg;
를 use utf8 한 것과 그렇지 않은 것을 비교해보시면 금방 아시게 될 겁니다.
terzeron
원글이 좀 오래된 내용이라서 요즘 현실에는 들어맞지 않는 방법입니다.
JEEN님, use utf8 기능을 쓰게 되면 당연히 입력을 UTF8으로 읽어들여서 글자수를 세게 되겠죠. 하지만, EUC-KR나 CP949로 저장되어 있는 경우에는 이 방법도 통하지 않습니다. 가장 일반적인 방법은 해당 데이터가 어떤 인코딩으로 저장되어 있는지에 따라 LC_CTYPE locale을 지정하고, 읽어들인 다음에는 유니코드(UCS4를 따르는 wide string이 적절함)로 변환한 다음에 글자 수를 세는 방법을 택해야 할 것입니다.
JEEN
제가 성급했군요. 죄송합니다. 길은 하나만 있는 게 아닌데 말이죠…;;
terzeron
아닙니다. JEEN님께서 알려주신 내용은 요즘 일반적인 UTF8 로케일 환경에 아주 적합한 사용예입니다. 감사합니다.