Keiko Labs

KIFファイルが文字化けするときの直し方(Shift_JISとUTF-8)

2026-11-03

将棋ソフトから書き出した KIF ファイルをテキストエディタや別のアプリで開くと、こんなふうに見えることがあります。

���F���i�T���v���j
���F���i�T���v���j

ファイルが壊れたように見えますが、壊れてはいません。ほぼすべてのケースで、原因は文字コードの読み違いです。この記事では、なぜ起きるのか、手元でどう直すのか、そして棋譜を読み込むアプリがどうやって自動判別しているのかを説明します。

なぜ文字化けするのか

テキストファイルは、中身が「どの文字コードで書かれているか」を持っていません。開く側が推測して読みます。

KIF 形式は古くからある形式で、Shift_JIS で保存されることが多いです。一方、今のエディタやWebアプリの多くは UTF-8 を前提に読みます。Shift_JIS のバイト列を UTF-8 として解釈すると、日本語の部分がまったく別の文字(か、変換できない記号)になります。これが文字化けの正体です。

逆もあります。UTF-8 で保存された KIF を、Shift_JIS 前提の古いソフトで開くと、同じように化けます。

手元で直す:エディタで「文字コードを指定して開き直す」

一番早いのは、エディタの「エンコーディングを指定して再読み込み」で Shift_JIS を選ぶことです。ほとんどのエディタに、この機能があります。

  1. 文字化けしたファイルを開いたまま、「エンコーディングを指定して開き直す」に相当するメニューを探す
  2. Shift_JIS(表記は「Shift JIS」「SJIS」「CP932」「Windows-31J」などの場合もあります)を選ぶ
  3. 正しく表示されたら、必要に応じて UTF-8 で保存し直す

3を行っておくと、以後どのアプリでも化けにくくなります。ただし、Shift_JIS 前提の古い将棋ソフトに戻して読ませる可能性があるなら、元のファイルは残しておいてください。

「そもそも何のコードか分からない」とき

見分け方の目安です。

最後の目安は便利です。手数と時間の欄が読めているなら、ファイルは無事です。

アプリ側で自動判別する仕組み

利用者にこの作業をさせたくないので、Ponder(チェス・将棋の検討盤)では棋譜ファイルを読むときに文字コードを自動で判別しています。仕組みは単純で、まず UTF-8 として厳密に読み、失敗したら Shift_JIS で読み直すだけです。

async function decodeFile(file: File): Promise<string> {
  // KIFはShift_JISで保存されていることが多い。UTF-8として不正ならShift_JISで読み直す
  const buf = await file.arrayBuffer();
  try {
    return new TextDecoder('utf-8', { fatal: true }).decode(buf);
  } catch {
    return new TextDecoder('shift_jis').decode(buf);
  }
}

ポイントは { fatal: true } です。ブラウザの TextDecoder は既定では、UTF-8 として不正なバイトを置換文字(�)に置き換えて黙って通します。これでは判別できません。fatal: true を付けると、不正なバイト列に当たった時点で例外を投げるので、「UTF-8 ではなかった」と分かり、Shift_JIS で読み直せます。

この順番(UTF-8 → Shift_JIS)にしているのは、UTF-8 は構造上「たまたま UTF-8 として正しく読めてしまう Shift_JIS のバイト列」がほとんど無く、逆は起こりうるからです。厳密な方を先に試すと、判定が安定します。

読み込めば、以降の処理(KIF / KI2 / CSA / JKF の形式判定、指し手の解釈、盤面の再現)は文字コードを意識せずに進みます。

それでも読めないとき

上の2種類で読めないファイルは稀ですが、あるとすれば次のどれかです。

まとめ

文字化けしたファイルをそのまま Ponder に読み込ませれば、上の仕組みで判別して開きます。開いたあとは、気になる局面で「なぜこの手?」と聞いて、回答の指し手を押して盤で確かめてみてください。

Ponder — チェス・将棋の棋譜に「なぜ?」を聞ける検討盤

棋譜を読み込んで、局面についてAIに質問できます。回答に出てくる指し手を押すと、そのまま盤が動きます。

無料デモを試す(登録不要) Ponderについて