テキストが文字化けするとき: Shift_JIS と青空文庫の記法

.txt を開いたら、日本語のかわりに意味のない記号が並んでいます。ファイルは壊れていません。バイトはすべてそこにあり、間違った対応表で読まれているだけです。

日本語では見た目の似た症状に二つの別々の原因があります。先にどちらかを見分けるのが早道です。

まず見分ける

画面に出ているものをよく見てください。

日本語は正しく読めるが、[# といった記号が混ざっている場合。 これは文字コードの問題ではありません。青空文庫の記法がそのまま表示されています。

日本語がまったく読めず、見慣れない記号の列になっている場合。 これが文字コードの問題です。

青空文庫の記法

青空文庫のテキストは、ルビと注記を本文中に記号で書き込む方式を採っています。

  • ルビは 漢字《かんじ》 のように親字の後ろに 《》 で書きます。
  • ルビをかける範囲の始まりは で示します。
  • 入力者による注記は [#「…」は…] の形で入ります。

この記法を解釈するアプリでは、ルビが小さく振られ、注記は表示されません。解釈しないアプリでは記号がそのまま出ます。

ファイルは正常で、変換の必要もありません。記号が気になる場合は、同じ作品の HTML 版を使うか、ウィキソースの EPUB を探すのが手早い解決です。

文字コードのほうの問題

日本語の古いファイルは Shift_JIS であることが多く、まれに EUC-JP や ISO-2022-JP も出てきます。

文字コードよくある出どころ
UTF-8現在の標準
Shift_JISWindows で保存された古い日本語ファイル、青空文庫の旧版
EUC-JPUnix 系、初期のウェブ
ISO-2022-JP古い電子メール
UTF-16一部の Windows ソフトの書き出し

アプリの現在の挙動

はっきり書いておくほうがよいでしょう。Aurora Reader は最初に UTF-8 を試し、失敗すると Latin-1 に退避します。Shift_JIS も EUC-JP も判定せず、設定に文字コードを選ぶ項目もありません。

Latin-1 は、エラー表示ではなく文字化けが出る理由も説明します。あの文字コードではどのバイトにも何かしらの記号が対応するため、退避経路は必ず「成功」します。ただし誤った文字を返すだけです。

この挙動は不具合として記録してあります。

直し方

パソコン上で複製を変換し、それを端末に戻します。

iconv -f SHIFT_JIS -t UTF-8 book.txt > book-utf8.txt

変わらなければ -f EUC-JP、次に -f ISO-2022-JP を試してください。この三つでほぼ片が付きます。

Windows ならメモ帳で開き、文字コードを UTF-8 にして保存し直す方法もあります。大きなファイルでは時間がかかります。

必ず複製で作業してください。指定を誤った変換は元に戻せません。

圧縮ファイルの名前が化ける場合

逆のこともあります。中身の文字は正常なのに、展開したファイル名が化けている。

これは別の話です。ZIP 形式は長らくファイル名の文字コードを規定しておらず、Windows の圧縮ソフトは Shift_JIS で書き込みます。一方 Android の展開ツールはたいてい UTF-8 として読みます。中身には影響しません。

数が少なければ名前を直すのが早く、多ければパソコンで文字コードを指定できる展開ソフトを使い、それから転送してください。

目次が空なのは別の問題

文字は正しいのに目次が空、ということもあります。

これは文字コードとは無関係です。アプリが章を探すときに照合するのは Chapter 1Part 2 といった英語の書き方で、「第一章」は当てはまりません。同じ箇所のコードが単語数を空白で数えるため、ページ数の推定も外れます。どちらも章の検出単語数の計算として記録済みです。

ファイルの破損とは違う

壊れたファイルはたいてい開かないか、途中で切れます。最初から最後まで一定して誤った文字が出るなら、バイトは無事です。区別はファイルが壊れているかの判断にあります。

拡張子を変えても意味はありません。拡張子は中身のバイトと何の関係もありません。

文字は正しいのに形がおかしい場合

その場合は文字コードではなくフォントの問題です。

Noto Sans CJK や源ノ角ゴシックは JP、TC、SC、KR に分かれており、同じコードポイントでも字形が地域ごとに違います。中国語版で日本語を読むと「骨」「直」「戸」などが中国の字形で表示されます。解決は日本語版のフォントを入れることです。

繰り返さないために

同じ作品が EPUB であればそちらを選んでください。EPUB は文字コードをファイル内で宣言するため、この問題自体が起きません。ウィキソースの EPUB 書き出しが便利なのはこのためです。

記事一覧