Programming

[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개

  • terzeron

    원글이 좀 오래된 내용이라서 요즘 현실에는 들어맞지 않는 방법입니다.

    JEEN님, use utf8 기능을 쓰게 되면 당연히 입력을 UTF8으로 읽어들여서 글자수를 세게 되겠죠. 하지만, EUC-KR나 CP949로 저장되어 있는 경우에는 이 방법도 통하지 않습니다. 가장 일반적인 방법은 해당 데이터가 어떤 인코딩으로 저장되어 있는지에 따라 LC_CTYPE locale을 지정하고, 읽어들인 다음에는 유니코드(UCS4를 따르는 wide string이 적절함)로 변환한 다음에 글자 수를 세는 방법을 택해야 할 것입니다.

답글 남기기