>>170
いろいろあると思うが、おれはこうしてる。
(1)最初に10バイトで切る。
(2)先頭から「正しいバイナリ」が続く部分だけ残して、その後ろを削除。

たとえば「Shift_JISまたはASCII」を切り出す場合は、
$str = substr($str, 0, 10);
$str =~ s/^((?:[\x81-\x9F\xE0-\xEC][\x40-\x7E\x80-\xFC]|[\xA1-\xDF]|[\x20-\x7E])*).*/$1/;