Tips in Action‎ > ‎문자열‎ > ‎

한글 글자 수 세기

전종필

문자열의 길이를 측정하는 함수는 length입니다.

$txt = "Hash and array";
print length($txt), "\n";
위의 경우 출력되는 내용은 14입니다.
영문자만 있으면 별 문제가 없지만, 한글이 포함된 경우는 의도에 따라 사정이 달라집니다.
그래서,

$txt = "Hash와 array";
print length($txt), "\n";
에서 $txt의 길이가 12가 아니라 11이 되기를 원하는 경우는 length함수가 제 역할을 하지 못하는 것 같습니다. 12로 나오는 경우는 한글 "와"자가 한 문자가 아니라 2바이트의 문자열이기 때문입니다. 여러가지 방법이 있을 수 있습니다만, 여기서는 Encode 모듈을 사용하는 방법을 말씀드리겠습니다.
Encode 모듈은 Perl의 문자열과 시스템간의 인터페이스를 제공합니다.
이 모듈을 사용하면 한글 한 문자를 2바이트가 아니라 한 문자로 취급하게 됩니다.

use Encode;

$txt = "Hash와 array";

print length($txt), "\n";

$txt = Encode::decode('euc-kr', $txt);

print length($txt), "\n";

$txt = Encode::encode('euc-kr', $txt);

print length($txt), "\n";
위 코드를 실행하면

12
11
12
를 출력합니다.
decode함수가 'euc-kr'로 encoding되어 있는 것(default)을 utr8로 풀어(decode)주는 것입니다. 이를 다시 encode를 호출하여 'euc-kr'로 encoding할 수 있습니다. 
Comments