#!/usr/bin/perl -w use strict; # cp932(Windows-31J) の未定義領域(厳密) my $undef_cp932_strict = '[\x85-\x86\xEB\xEC\xEF][\x40-\x7E\x80-\xFC]' . '|\x81[\xAD-\xB7\xC0-\xC7\xCF-\xD9\xE9-\xEF\xF8-\xFB]' . '|\x82[\x40-\x4E\x59-\x5F\x7A-\x7E\x80\x9B-\x9E\xF2-\xFC]' . '|\x83[\x97-\x9E\xB7-\xBE\xD7-\xFC]' . '|\x84[\x61-\x6F\x92-\x9E\xBF-\xFC]' . '|\x87[\x5E\x76-\x7D\x9D\x9E\x9F-\xFC]' . '|\x88[\x40-\x7E\x80-\x9E]' . '|\x98[\x73-\x7E\x80-\x9E]' . '|\xEA[\xA5-\xFC]' . '|\xEE[\xED\xEE]' . '|\xFC[\x4C-\x7E\x80-\xFC]'; # cp932→Unicode→cp932 の変換で元に戻らないコードポイント my $dup_cp932 = '[\xED-\xEE][\x40-\x7E\x80-\xFC]' . '|\x87[\x90-\x92\x95-\x97\x9A-\x9C]' . '|\xFA[\x4A-\x54\x58-\x5B]'; for my $c1 (0x81..0x9F, 0xE0..0xFC) { for my $c2 (0x40..0x7E, 0x80..0xFC) { my $sjis = pack('CC', $c1, $c2); next if ($sjis =~ $undef_cp932_strict || $sjis =~ $dup_cp932); print $sjis, "\n"; } }