Null文字判定
masashiからメッセを受けて、ちょっと相談に乗ったんで。あまり力になれずでしたが…orz
テキストファイルをエディタで開こうとした時に、
NULL文字が含まれてるっていうメッセージが出てくるんやけど、
NULL文字は自動的に半角スペースに置き換わってしまうんよね。
(まぁエディタによってその仕様は違うと思うけど)
それで、知りたいのは、
そのNULL文字がどこにあるかを特定する方法
なんかないかいなぁ?
仕様的には、普通のテキストファイルに時々Null文字が紛れ込むといった感じみたい。ま、話聞いて漠然と感じただけなんで、裏づけも何もないですが。
とりあえず
- バイナリエディタで手軽に
- ちゃちゃっとバイトストリームで読むスクリプトを作る
の二つの選択肢を提案しました。*1
で、二番目の選択肢で「ちゃちゃっと」と言ったからには、自分でも「ちゃちゃっと」作れないとカッコ悪いな思ったんで、ちょい実装。
どうやってNull文字の箇所を判定するかですが、以下の手順でできるかなと。
- バイナリでデータを読み込む
- Nullのコード(0x00)を" [N] "(0x205B4E5D20)に変換する
- そのデータをバイナリ書き出し後、再度テキストファイルとして読み込む
というわけで、Perlのコードを。
#!/usr/bin/perl $file = shift || 'null.txt'; open IN, "< $file"; while (<IN>) { $str = unpack("H*", $_); $str =~ s/00/205B4E5D20/g; # 0x(205B4E5D20) -> ' [N] ' print unpack("a*", pack("H*", $str)); } close IN;
スクリプト作成時間は、技術検証なども含めて1:43。残念ながら、これでは「ちゃちゃっと」とは言いがたいレベルです。
ま、今回はバイナリ読み込みよりも、むしろ思い通りのバイナリデータを作り込む方に時間を取られたのですがね…