コードページ


文字化け

日本語を表示させようとしなければ、英語のソフトを問題なく使えるかというと
そうでもないようだ。
変な文字が表示されてしまう。

どうやら普通の記号やアルファベット以外の文字も使われていて
日本語の文字コード程かは分からないが、文字コードもいくつかあるようだ。

roguelike game で出てくるのは多分 IBM PC のコードページ437 だろう。

規格はどうだか知らないが
#include <stdio.h>
#include <locale.h>
#include <ctype.h>
main() {
  int l,h;
  setlocale(LC_CTYPE, "us"); //USのとき
  //setlocale(LC_CTYPE, "jpn"); //JPのとき
  printf("locale:%s\n", setlocale(LC_CTYPE, NULL));
  printf("     0123456789abcdef");
  for (h=0; h<16; h++) {
    printf("\n0x%02x:",h*0x10);
    for (l=0; l<16; l++) {
      int c = h*16+l;
      if ( isprint(c) ) putchar(c);
      else putchar(0x20);
    }
  }
return 0;
}
で出力すると

コードページ437


Shift-JIS


となった。(Windows XP + Borland C++ Compiler)
とりあえず、英語のソフトをそのまま使うなら
プロンプトのコードページを437にすればちゃんと表示される。

日本語化

コードページ437のソフトを日本語のコードページ932で使えるように日本語化できるか?
Shift-JIS はコードページ437の文字を含んでいるか調べていないが
Unicode でコードページ437の文字を表示させてみたところ、
フォントの問題?か全角で表示されてしまった。
文字がそろわなくなってしまうのは roguelike game では致命的。

コードページ437のプロンプトで日本語を Unicode で表示するのが良さそう。
NT系のWindowsでないと動作しなくなってしまうが。

日本語環境で表示

コンソールアプリケーションはおいといて、Windowsアプリケーションで表示するにはどうしたものか。
フォントの設定をいじくって表示するプログラムを書いて、いろいろ試してみたところ、
Terminal フォントを選んで CHARSET に OEM_CHARSET を設定すると表示できた。

testfont.zip (250,358 バイト)


リンク