つまずきを減らす!テキストエディタのShift-JIS、Shift-JISを自動判定

Shift_JIS原稿を自動判定して正しい読み取り経路へ送るアイキャッチ

古い原稿を開いたとき、文字コードは自分で選ぶのではなく、エディタが判定しています。 その判定は多くの場合当たりますが、必ず当たるわけではありません。だから「開いたら化けていた」というときに最初に見るのは、原稿の中身ではなく、いま何と判定されているかです。

この記事では、判定がどういう順番で行われるのか、当たらない場合に何が起きるのかを扱います。UTF-8への変換の手順や、化けを直す手順は別の記事に譲ります。

文字コードは、ファイルに書いていない

意外に思われるところですが、テキストファイルには「このファイルはShift_JISです」という情報が入っていません。入っているのは番号の並びだけです。

だから開く側は、番号の並びを見て、どの文字コードかを推測します。 「この並び方はShift_JISとして自然だ」「UTF-8としては不自然だ」といった判断です。

例外が1つあります。ファイルの先頭にBOMという小さな印が付いていると、そこで文字コードが分かります。ただしBOMは付いていないことも多く、日本語のテキストファイルでは付いていないほうが普通です。

自分で選び直す、という方法

判定が外れたときの素朴な対処は、文字コードを自分で選び直して開き直すことです。Shift_JIS、UTF-8、EUC-JPと順に試して、読める形になったものを採用します。

「読める形になった」が、必ずしも正解ではない

問題は、判定が外れても本文としては読めてしまう場合があることです。

取り違え方によって、症状の出方が変わります。Shift_JISの原稿をUTF-8として開くと、ほぼ全部が読めない記号になるので、さすがに気づきます。厄介なのは、正しく判定されたのに一部の記号だけが別の字として入ってくる場合です。 本文は普通に読めるので、読み返しても気づかず、そのまま保存してしまいます。

そして、保存した瞬間に取り返しがつかなくなることがあります。 取り違えた読み方で表示された文字を、そのまま別の文字コードで保存すると、元の番号は失われます。

もう一つ、判定が外れやすい原稿があります。 短い原稿、英数字だけの原稿、記号が多い原稿です。判断材料が少ないほど、当たりにくくなります。

rune Studioは、判定の結果を返す

rune Studioは、原稿を読み込むときに文字コードを判定します。BOMという印を先に見て、次にシステムの自動判定、そのあと主要な日本語の文字コードを順に試します。

扱えるのは、UTF-8、BOM付きのUTF-8、Shift_JIS、EUC-JP、ISO-2022-JP、UTF-16の2種類、そして最後の受け皿となる形式です。

実際に開発版を命令から動かして確かめました。Shift_JISで保存した原稿を読み込むと、文字コードはShift_JISと判定され、改行コード、文字数、行数も一緒に返りました。 UTF-8の原稿を読み込むと、UTF-8と返りました。

推測ではなく、結果として分かります。

判定は当たっても、1文字も違わないとは限らない

ひとつ、実際にやってみて分かったことがあります。Shift_JISの原稿に波ダッシュ(〜)を書いて保存し、読み出したところ、全角チルダ(~)になって返りました。 見た目のよく似た別の文字です。

これは判定の失敗ではなく、文字コード間の対応の問題として昔から知られているものです。ただ、「判定が当たった=元の原稿と1文字も違わない」ではないということは、知っておく価値があります。記号が多い原稿では、開き直したあとに記号だけを見比べてください。

判定結果は画面でも確認できる

読み込んだ文字コードと改行コードは、画面の下部に表示されます。切り替えることもできます。開いた直後にここを見る癖をつけると、本文を読み進める前に取り違えに気づけます。

表せない文字がある間は保存が止まる

判定とは別に、その文字コードで表せない文字がある場合は保存が止まります。実際に確かめたところ、保存されず、この文字コードでは表せない文字が1か所ある、という結果が返り、ファイルは作られませんでした。

なお、この「保存されない」は命令から保存した場合に実際に確かめた結果です。アプリの画面で保存する場合は、資料によれば保存のときに警告が出て、自動保存が止まり、画面右上に通知が出ます。画面で保存したときに実際どうなるかは、この工程では確かめていません。 確かめたのは命令から保存した場合だけです。

取り違えたまま保存して壊す、という経路の一部がふさがれています。

向く人と、別の方法が向く人

向いているのは、古い原稿や他の人から受け取った原稿を扱う人です。 自分がUTF-8で書き始めたものでも、受け渡しで別の文字コードが混ざります。

最初から最後までUTF-8だけで進むなら、判定を意識する場面はほとんどありません。 新しく書き始める原稿なら、まず問題になりません。

なお、確かめたのは判定結果が返ることと、記号が1つ別の文字として返ったことまでです。すべての原稿で判定が当たるとは書けません。

まとめ

次の一歩として、いま扱っている原稿を1本開いて、何と判定されているかを確かめてください。UTF-8以外なら、記号の見比べもしておくと安心です。

Rune Studioの製品ページを見る