Summary. 果たしてこれが何の役に立つのか自分でも疑問ですが(おい)、リプレイファイルの名前に使える文字を調べてみました。うまく使うと順番の整理とかに役立つ・・・かも。

表示可能な文字

まず、大前提として ゲームの中に用意されていない文字は表示されない です。というわけで、某Susieでさくっと漁ってみると下のようなデータが見つかります:
どうやらこれが表示可能な文字のすべてみたいです。文字コードに詳しい人なら、この配列にピンと来るところがあると思います(そうでなくても、キーボードの1段目と比較すると雰囲気がわくかも)。

実際はこれ以降に説明するように "文字化け" が生じます。たとえば、小文字のアルファベットは全部大文字に変換されます。そのため、小文字のアルファベットを混ぜることは(基本的に)不可能です。

ASCII文字

いわゆる半角文字(1バイト文字)の場合、半分くらいはそのまま表示されます。それがどの文字で、他の文字はどうなるか、一覧表にしました(オレンジが化ける文字):

  2 3 4 5 6 7
0 SP 0 @ P ` p
1 ! 1 A Q a q
2 2 B R b r
3 # 3 C S c s
4 $ 4 D T d t
5 % 5 E U e u
6 & 6 F V f v
7 ' 7 G W g w
8 ( 8 H X h x
9 ) 9 I Y i y
A J Z j z
B + ; K [ k {
C , L l
D - = M ] m }
E . N ^ n ~
F O _ o
"SP" は半角空白。
  • 小文字アルファベット  →  大文字になる
  • [ ] ^ _ `  →  それぞれ a ~ f  に変わる
  • セミコロン  →  =  に変わる
  • それ以外は空白に変わる

左にあるほど(同じ列ならより上にあるほど)順番が前になる。
ただし、a~zは大文字にされてから並ぶ(=A~Zの位置)。

同じ空白でも「@」が化けたものはアルファベットの前に来て、
「~」が化けたものはアルファベットの後に来る。

2バイト文字

基本的な処理

自分の知る限りReACTが動作する環境はWindowsのみなので、普通は文字コードとしてシフトJISが使用されているはずです・・・たぶん。

結論から言うと、2バイト文字が含まれていた場合は 1バイトずつバラバラに扱われる ようです[1]。もう少し細かく書くと、ファイル名の各バイト毎に
  1. ASCII文字の範囲外(0x80以降)なら空白。
    ただしそれがファイル名の先頭だった場合は完全に無視される
  2. ASCII文字の範囲内かつ "小文字のアルファベットでない" なら上の通り
  3. 小文字のアルファベットの場合、小文字のまま表示される
という規則になっています。シフトJISの仕様上、最初の1バイトは必ず空白になってしまいます。また、2バイト目も0x40~0x7Eが使われるので 「 : 」 などはどうやっても使用できません。

例外

実はこれでもまだ不完全で、たとえば全角の「b」(0x8282)は上位も下位も両方とも0x82なのに "空白+a" に化けます。これは自分の予想ですが
全角の小文字アルファベットも大文字に変換してから処理される
のではないかと思います。実際大文字の「B」(0x8261)なら2バイト目がaになります。上にある「aがAになる」が適用されないのは、この2つの処理が同一のものだから「二度掛け」が起こらない・・・てことでしょうか。

まあ、なんでそんな無駄なことをしてるのか謎ですがw(全角文字にも効くtowupperみたいなのを使ったとか)





[1]
文字コードについては、IMEの文字一覧などでご確認ください。
最終更新:2013年08月02日 15:41