Windows用テキストエディターのUnicode対応について

はじめに

Windows用のテキストエディターは、大きく分けてUnicode対応のものと対応ではないものの2種類があります。そんな話をちょっと書いてみたいと思います。

※本稿は編集環境が現行Windows(XPから8.1まで)のみで構成されていることを前提としています。

Windowsがサポートする文字コード

現在のWindowsには2つのWin32 APIセットがあります。1つはUnicodeを扱うもの、もう一つはOEMコードページに対応する文字コードを扱うもの(DBCS※1で、日本ではいわゆる「Shift-JIS※2」)です。

もともとWindowsにはDBCSを扱うAPIのみが存在していました。※3 それが現在のWindowsの系譜の始祖となるWindows NTにおいて、Unicodeを扱うAPIが追加されました。このWindows NTではUnicodeがネイティブでDBCSは内部でUnicodeに変換されて実行されます。そして、そのWindows NTがバージョンアップを重ねて、現在のWindows 7や8になりました。

この関係で、現在のWindowsは歴史的経緯のある互換性のためのDBCS用APIと、ネイティブのUnicode用のAPIが併存しています。

UnicodeとShift-JISが扱える文字

Unicodeは従来の日本、中国、韓国やその他の国の文字コード(字形)をすべて取り込めるように設計されています。このため、UnicodeはShift-JISの文字をすべて含みます。一方でShift-JISはUnicodeの文字の一部のみを扱えるにすぎません。このため、Shift-JISからUnicodeへの変換では問題は発生しません※4が、UnicodeからShift-JISへの変換では、適切に変換できなかったり一部が代替コードに置き換えられるなどの変化が生じることがあります。

Unicode対応のテキストエディターとDBCS対応のテキストエディター

プログラムのつくりによって、アプリケーションはUnicode対応のものとDBCS対応のものに分かれます。当然、テキストエディターもこのどちらかになります。ここで重要なのは、「Unicode」「UTF-8」などのファイルを開けるテキストエディターが必ずしもUnicode対応ではないことにあります。ファイルを開くときに、Unicodeを内部でDBCS(Shift-JIS)に変換して扱うものがあるのです。

そのようなテキストエディターでファイルを開き、何もせずに保存をすると、何もしていないのにもかかわらず、内容が変わってしまうことがあります。また、少しだけ変更して保存をしたつもりでも、ファイルのあちこちの文字が化けたり変わったりしてしまうこともあります。特に最近はShift-JISでは扱えない文字を使うことが当たり前になっており、こういった意図しない変更が行われてしまう事故を見かけることが多くなってきたように思います。

このように、内部までUnicode対応なのか、入出力だけUnicode対応で内部はDBCS(Shift-JIS)対応なのかを見極めてテキストエディターを選ぶ必要があります。現代では、内部DBCS(Shift-JIS)対応のテキストエディターを使用することは前述のような事故を発生させることがあるため、特別な理由がない限り控えたほうがよいでしょう。

テキストエディターが内部Unicode対応か確認する方法

では、該当するテキストエディターが内部Unicode対応かどうか、どのように確認すればよいでしょうか?プログラミング用のツールで確認すると確実なのですが、それを用意しなくても比較的簡単に見分けることができます。それは「€(ユーロ)」や「♥(ハート)」など、Unicodeには存在してもShift-JISには存在しない文字含む内容のテキストをUnicodeやUTF-8などの形式でファイルとして保存し、テスト対象のテキストエディターで開き、正しく表示されるかどうかで確認できます。できれば念のために保存し直して、正しい内容で保存されることも確認したほうがよいです。

また、テキストエディターに該当文字をコピー&ペーストで貼り付けてみてもよいでしょう。文字が正しく貼り付けられれば、ほとんどのケースで内部Unicode対応です。

まとめ

このようにテキストエディターにはUnicode対応か否かで扱える文字に差が出ます。繰り返しになりますが、現在は内部までUnicodeに対応していないテキストエディターを用いると意図しないファイル破壊を引き起こす可能性があるため、特別な理由がない限り、内部までUnicodeに対応したテキストエディターのみを使用すべきです。

Shift-JIS専用でファイルもShift-JISでしか入出力しないものであれば、ファイルの破壊は引き起こしませんが、コピー&ペーストでやはり壊してしまうことがあるのでやはり避けた方がよいでしょう。※5

私はこれらの問題でファイルを壊された悲しい経験が複数回あります…。


  • Double Byte Character Set。1~2バイトで1文字を表すコード体系を指す言葉です。
  • Shift-JISであり、Shift_JISではありません。Charset名のShift_JISとは異なるものです。Shift-JISのCharset名はWindows-31Jです。Shift-JISとUnicodeの対応は、個々のWindows製品ごとにMicrosoftが定めています。
  • Windowsを動かす土台となっていたMS-DOSがDBCSを扱う設計になっていたことによります。
  • Microsoftが文字を割り当てていない部分(Shift-JISとして文字が割り当てられていない部分)はもちろん変換できません。が、そもそも何に解釈されるか不明なコードが別のものとして扱われてしまうのはやむを得ないところでしょう。
  • しかし、正体不明のShift-JIS系の形式を扱う場合には重宝することもあるかもしれません。