パスワードをひらがなに限定すれば
確かに文字コード・エンコーディングがらみのごちゃごちゃは考えなくても良くなりそうな気もするが……いや、今となってはUnicodeのことも考えなきゃならん。ひらがなの文字コード範囲はJISなら0x2420〜0x2473、Shift-JISなら0x829f〜0x82f1、EUC-JPなら0xa4a0〜0xa4f3。UnicodeだとU+3040〜U+3094で、UTF-8にエンコードすると0xe38180〜0xe39294になるようだ。*1
てことは、重複するのはShift-JISの1バイト目(0x82)とUTF-8の2バイト目(0x81〜0x92)・3バイト目(0x80〜0x94)だけか。これなら、システム側でこんなロジックを組んでみれば、エンコーディングがどうであってもひらがなを受け取れるのかな?
- 受け取ったデータ中に最上位ビットの立ったバイトがなければJIS
- 全バイトが0xa0以上ならEUC-JP
- 1バイトおきに0x82と0x9f〜0xf1が現れるならShift-JIS
- どれでもなければUTF-8
しかしまぁ、こんなアドホックなロジック、俺ならシステムに組み込む気にはなれんなぁ。
あと、別の問題として、パスワードに日本語を使えるようにすると、ますます辞書に載ってる単語や自分の名前なんかをパスワードに使っちゃうケースが増えるような気がしてきた。