BLOG

Go to top


文字コードが utf8 の場合の Perl における文字数のカウント

December 1, 2007 2:45 PM

文字コードが utf8 の場合、日本語は 3 バイトになるため、カウントしたい文字列をいったんデコードしてから文字数をカウントする必要があります。その際、正確に文字数をカウントするために改行は削除しておくこと。

以下のようにして Encode モジュールを使用し、デコードしてから文字数のカウントを行います。

#!/usr/bin/perl -w

use Encode qw(decode);

my $text = 'こんにちは世界';

my $c_text = $text;
$c_text =~ s/\r//sig;
$c_text =~ s/\n//sig;
my $length = length(decode('utf-8', $c_text));

print 'length => ' . $length;

出力結果は以下のようになります。

length => 7

デコードせずに出力する場合は、文字数が正確に認識されません。デコードせずに文字数をカウントするには、以下のようなソースになります。

#!/usr/bin/perl -w

my $text = 'こんにちは世界';

my $c_text = $text;
$c_text =~ s/\r//sig;
$c_text =~ s/\n//sig;
my $length = length($c_text);

print 'length => ' . $length;

この場合の出力結果は以下のようになります。$text に代入した「こんにちは世界」は 7 文字なので、ちょうど 3 倍になっていることがわかります。

length => 21

Comments


Contact me

Copyright © 2005 - 2017 okayama All rights reserved.