相談フォーム信頼の「飲んだくれマーク」をご確認下さい。2016年3月3日プログラマの苦悩というか小話を書いてみます。皆さんの環境では次の文字はどのように表示されますでしょうか。「円マーク」が表示されると思います。稀に文字化けしたり四角が表示されるかもしれませんが。これは?\バックスラッシュ(スラッシュ"/"と反対の向きのスラッシュ)が表示された人は、「正しく」文字を表示できている環境です。円マークになってしまった場合は、それは「正しくない」環境です。(何を持って正しいかというのは難しいところですが、ここではそういう事にしておきます)コンピュータの世界における文字コンピュータは数字しか解釈しないので、画像も文字も音楽もすべて数字による計算の問題に置き換えてあげる必要があります。言うとコンピュータに疎い人は驚くかもしれませんが、そういうものなんです。プログラマの仕事は現実の世界の問題や事象を数字の世界に置き換えてあげることです。文字を扱うとき、コンピュータの世界では文字セット(キャラクタセット)と符号化方式(エンコード)という二つの概念を使います。0212)とか、英数字とか、世界中で使われている文字のほとんどを含むようなもの(Unicode)とか、いろんな文字の集合があります。その文字の集合に対して、(16進数の)番号を振っていきます。これが文字コードです。後述する符号化方式(エンコード)の事や、文字セットまでごっちゃにして単に「文字コード」と呼んでいる人がたくさんいますが、ここでは置いときます。符号化方式は何かというと、その番号を実際のコンピュータ上で使用するためにどのように数字を割り当てていくか...という規約を決めたものになります。えっ、文字コードという番号を決めたのに、その番号をまた別の番号に変換するの?と思ったでしょう。思いましたね?なぜそんなまどろっこしい事をしているのかというと、「1文字をx個の数字で表します」と国際的に決めてしまったら「えっ、うちのコンピュータ(ソフト)はy個単位でしか処理できないんだけど」「いや、その番号の振り方は冗長すぎる。すればもっと短くなる」「いやいや、あまりにビット長にこだわったら計算処理にコストがかかっちゃうよ。電源が限られてるモバイラーの事も考えてよ」などと議論が紛糾することになります。「文字の集合と文字コードは決めました。あとは各々やりやすいように実際のコンピュータで使う番号を独自に割り当てていってね」というのが、文字コードと実際に扱われる数値(符号化方式)を分けている主旨なのです。そいで、その符号化体系としてShift_JISやらEUC-JPやらUTF-8とかUTF-16とかいうエンコーディングがあるわけですね。これらはコンピュータに詳しく無くても何か聞いたことがある、という人も多いでしょう。昔はブラウザから文字コードの解釈を手動で出来たりしました。ASCIIとバックスラッシュと円マークここでようやく本題に入っていきます。その昔、アメリカでコンピュータ上で文字を扱う方法としてASCIIというものがありました。646として国際規格化されます。このころはまだ文字コードと文字集合、エンコードの概念もまだごっちゃになっていました。コンピュータの性能も良く無いし、そもそもインターネットが存在しなかったことから「全世界の文字を統一的に扱える仕組みを作ろう」などという議論がそもそも無かった(もしくは優先度が低かった)ことが背景と思われます。646は各国で固有に置き換えてよい12個の符号を規定していました。これが全ての元凶でした。この符号に対しては各国で好き勝手に文字を振ってしまったのです。0201として規格化してしまいました。(ちなみに、wikipediaの表をみるとまだ日本などはマシで、ドイツあたりはひどいことになっています)このために、JIS規格ではバックスラッシュの文字コード(文字符号)に円マークが割当たってるわけです。問題発生その後、ASCIIはパーソナルコンピュータの世界にも引き継がれます。日本語キーボードには「¥」の文字が刻まれ、このキーを押すと文字コード「5C」が入力され、画面上には「5C」に対応する「¥」マークが表示されます。ここで問題がややこしくなってくるのが、コンピュータの世界では結構バックスラッシュは使うのです。分かりやすいのはWindowsのパス名でしょう。「c:\windows\system32」などと書きますね。元を辿るとこのパスの書き方はMS-DOSまでさかのぼります。米国などではこのパスはバックスラッシュで画面上に出てきますが、日本だと円マークで表示されてしまいます。その他にも、プログラミングの世界では特殊な文字を入力するとき(エスケープシーケンス)に頭にバックスラッシュを付けたりすることが良くあります。日本ではバックスラッシュには円マークが割当たっているためバックスラッシュは使えません。MSやNECなどはMS-DOSやWindowsが普及し始めたときにこれを直そうとはせず、「パス名はバックスラッシュで記載」というふうにマニュアルに記載しました。