UTF-8 でのファイルサイズ

PerlUTF-8 なファイルを作成すると、どうもファイルサイズが思ったものと違ってくることに気がついて、以下のスクリプトでテストしてみた。


#!/usr/bin/perl

use strict;
use warnings;
use Encode qw /decode is_utf8/;
use Encode::Guess qw /euc-jp shiftjis 7bit-jis/;
use FileHandle;

check_size("東京特許許可局");
check_size("東京特許許可局長");
check_size("東京特許許可局副長");
check_size("東京特許許可局副長\n");

sub check_size {
my $str = shift;

my $utf8 = decode("Guess", $str);
print "content length = ", length $utf8, "\n";
print "is_utf8 = ", is_utf8($utf8), "\n";

my $fh = new FileHandle;
if( $fh->open("> /var/tmp/test") ) {
binmode $fh, ':utf8';
$fh->print($utf8);
$fh->flush;
my $size = ($fh->stat)[7];
print "file size = $size\n";
$fh->close;
}else{
die "cannot open file : $!\n";
}

my $size = ( stat("/var/tmp/test") )[7];
print "file size = $size\n";
}

% ./test_utf8write.pl
content length = 7
is_utf8 = 1
file size = 21
file size = 21
content length = 8
is_utf8 = 1
file size = 24
file size = 24
content length = 9
is_utf8 = 1
file size = 27
file size = 27
content length = 10
is_utf8 = 1
file size = 28
file size = 28

どうも日本語一文字3バイトで改行は1バイトになってるっぽい。
あれえ、なんか不思議だな...。

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/utf-8.7.html
単純に全部2バイトかと思ってたけど、そうでもないのね。知識不足でした。
納得

っつーか、はてなキーワードにもっと簡単に書いてあるジャーン。
UTF-8とは - はてなキーワード
自分の日記見て気づいたよ。