0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🍎🍏🍐 BOMを果実で可視化する:PerlでのBOM検出と明示表示

Posted at

🍎🍏🍐 BOMを果実で可視化する

テキストファイルを扱うとき、BOM(Byte Order Mark)の存在が処理に影響することがあります。特にUTF-8/UTF-16の混在環境では、BOMの有無を明示的に扱うことで、より堅牢で詩的な処理が可能になります。
今回は、PerlでBOMを検出し、🍎🍏🍐の絵文字で可視化するサンプルを紹介します。

🍓 BOMと果実の対応表

    "\xEF\xBB\xBF" => '🍎',  # UTF-8 BOM
    "\xFE\xFF"     => '🍏',  # UTF-16 BE BOM
    "\xFF\xFE"     => '🍐',  # UTF-16 LE BOM
);

🥄 ステップ1:バイナリモードでBOMを取得
まずはファイルをバイナリモードで開き、先頭3バイトを読み取ってBOMを検出します。

open my $bin_fh, '<:raw', 'filename.txt' or die $!;
read($bin_fh, my $bom, 3);
if (exists $chege_BOM{$bom}) {
    $bom = $chege_BOM{$bom};
} else {
    $bom = '';
}
close $bin_fh;

🍵 ステップ2:テキストモードで再読み込みし、BOMを明示

UTF-8として再度ファイルを開き、最初の行にBOMを果実で添えて表示します。

open my $txt_fh, '<:encoding(UTF-8)', 'filename.txt' or die $!;
my $i = 0;
my $disp_bom = 1;

while (my $line = <$txt_fh>) {
    if ($bom && $disp_bom && $i == 0){
        $line = $bom . $line;
    }
    # ...ここで行を処理...
    $i++;
}
close $txt_fh;

まとめ

###### BOM 明示の読み込み例  ######

my %chege_BOM = (
    "\xEF\xBB\xBF" => '🍎',  # UTF-8 BOM
    "\xFE\xFF"     => '🍏',  # UTF-16 BE BOM
    "\xFF\xFE"     => '🍐',  # UTF-16 LE BOM
);

# バイナリモードでBOM取得
open my $bin_fh, '<:raw', 'filename.txt' or die $!;
read($bin_fh, my $bom, 3);
if (exists $chege_BOM{$bom}) {
    $bom = $chege_BOM{$bom};
} else {
    $bom = '';
}
close $bin_fh;

# テキストモードで再度開く(UTF-8例)
open my $txt_fh, '<:encoding(UTF-8)', 'filename.txt' or die $!;
my $i = 0;
my $disp_bom = 1;
while (my $line = <$txt_fh>) {
    if ($bom && $disp_bom && $i == 0){
        $line = $bom . $line;
    }
    # ...処理...
    $i++;
}
close $txt_fh;

🍇 おわりに

このように、BOMの存在を果実で可視化することで、処理の分岐やデバッグが直感的になります。特に複数の文字コードが混在する環境では、こうした「詩的な可視化」が密度ある記録と共鳴を生み出します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?