上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

日本製のテキストエディタでASCII範囲内で記述されたファイルを編集するとき、 Shift_JISと識別するのが気に入らない。
仕事で作っているアプリケーションがUTF-8なのだが、これようの設定ファイルには日本語が含まれるので、UTF-8でなければならない。しかし、設定ファイルなので日本語を含まないこともよくある。
ASCII範囲で収まっている場合、編集画面の右下に出現する「Shift_JIS」の表示を見て、チーム内で「UTF-8になっていない!」とか言い始める。

しかし、これはスキルがないのが問題と言うよりも、ASCII範囲内のときにShift_JISと認識させるエディタ側の問題である。 ついでに言えば、実際にはWindows-31JなのをShift_JISと表示するなと言いたいが。

さて、本題。 ASCIIはASCIIであって、決してShift_JISやWindows-31JやUTF-8ではない。 日本製エディタのほとんどが文字コードの自動識別巣を行うが、ASCIIのバイト列はいずれのバイト列と識別しても問題はない。 そこで、ほとんどのエディタはASCIIを別のエンコードとしてしまう。Windowsの場合、標準的なWindows-31Jとなる。

特にUTF-8などのASCII互換エンコードのファイル内に日本語が入ったり入らなかったりする時に、エディタで編集するたびに明示的に指定しなければならなくなる。

さらにこの問題はサクラエディタではよりひどい状況を生み出す。サクラはファイルのエンコード情報を別途保持している。過去にUTF-8で作成されたが、現在はASCIIのみのファイルを開くときに自動識別機能がShift_JISとしてしまい、「ファイルのエンコードと過去開いたエンコードが違います」とダイアログを出してくれる。 これは大変面倒である。もっとも、他のエディタには黙ってWindows-31Jにしてくれるものもあり、いつのまにかファイルのエンコードが変わっているという事態もあり得るが。

別の問題として、そもそもASCIIとShift_JIS(Windows-31J含む)では0x7f以下にも意味の違うコードポイントが存在している。要するに両者の互換性というのはコンピュータで処理するときに致命的な問題を起こさないという程度の意味なのだ。
バックスラッシュと円記号なんてその代表例だ。
もっとも、UnicodeへのマッピングではShift_JIS(Windows-31J含む)は結局0x7f以下はUS-ASCIIと同じにされたはずだが。

さて、これらの問題点はシンプルに解決できるはずだ。
Windows-31J、EUC-JP、UTF-8に加えて、ASCII(あるいはUS-ASCII)を取り扱いエンコードとして明示的に指定できるようにすればいい。

こうすれば、ASCIIの文書を英語環境で見るのとまったく同じに扱うことができる。
利点をまとめると以下の通り。 

  • ASCIIで書かれたファイルをASCIIと識別できる。(その他のエンコードのASCII範囲内のファイルとの区別は難しそうだが、これは自動識別の限界なのであきらめるべきである。)
  • 文字をASCIIとして正しい字形で表示できる
  • ASCII範囲外の文字の不用意な挿入を防止する機能を作れる。
    また挿入する時点でエンコードを選択させることもできる。

この機能により、たとえば、UTF-8で編集したファイルがたまたまASCII範囲内に収まった場合、次に開くときにはASCIIと識別される。しかし、再びASCII範囲外の文字を入力するとエンコードを指定するようエディタはユーザーに求めるだろう。
また、サクラのような過去のエンコーディングを持つエディタは、それがASCII互換であれば過去のエンコードに自動的に切り替えればよい。

このように、一見すると面倒くさそうなエンコードの問題もASCIIというエンコードを明示的に導入することで解決可能なはずである。要望でも出しておくか。

スポンサーサイト

09/20|コンピュータコメント(0)トラックバック(0)TOP↑
この記事にコメント
名前:
コメントタイトル:
メールアドレス:
URL:
コメント:

パスワード:
管理人だけに表示:
管理者にだけ表示を許可
この記事にトラックバック
プロフィール

G.U.Nex

Author:G.U.Nex
職業:プログラマ
趣味:ゲーム(PC、コンシューマ)、ネットサーフィン、ニコニコ動画視聴、プログラミング、鉄道全般
PHP, C, C++, VB(系), Java, JavaScriptを使える。
最近はRubyにはまってる。

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム
ブログ内検索
RSSフィード
リンク
フリーエリア
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。