[ アカウントをゲット! ]
1983年3月にMS-DOS 2.0をリリースした際、Microsoftはディレクトリの区切記号を0x5Cにするという愚を犯した。0x5CはISO 646の国内使用箇所なので、各国ごとに収録されている文字が異なっている。この結果、アメリカのMS-DOSでは「\」がディレクトリの区切記号だが、日本のMS-DOSでは「¥」がディレクトリの区切記号となった。しかも、当時のアメリカのMS-DOSは、IBM-PCの文字コード(のちのCP437)をそのまま採用しており、そこでは「¥」が0x9Dに収録されていた。つまり「¥」は、日本のMS-DOSではディレクトリの区切記号だったが、アメリカのMS-DOSではディレクトリの区切記号ではなかった。1983年5月にリリースされたMS-DOS 2.01漢字版においても、文字コードはシフトJISに拡張されたものの、やはり0x5Cは「¥」だった。
1991年6月に出版された『The Unicode Standard, Version 1.0, Volume 1』では、「¥」はU+00A5に収録された。この本には、CP437やシフトJISとの対応表も収録されており、CP437の0x5CはU+005Cの「\」に、CP437の0x9DはU+00A5の「¥」に、シフトJISの0x5CはU+00A5の「¥」に対応づけられた。Unicodeはあくまで文字コードなのだから、文字の符号化を考える限り、当然の措置である。つまりUnicodeをマジメに実装するなら、MicrosoftはU+00A5に対して、日本とアメリカで異なる動作をするようにしなければならない、ということになる。ISO 646の国内使用箇所を軽ろんじた報いだ。
ところが、1996年1月12日にMicrosoftのLori HoerthとK. D. Changが発表した『cp932_ShiftJIS to Unicode table, Version 1.0』には「0x5C 0x005C # REVERSE SOLIDUS (rendered as Halfwidth Yen Sign)」という対応が示されていた。0x5Cに対してU+005Cの「\」を対応させるが、表示には円記号を用いる、というトンでもない解決法である。そりゃ、MicrosoftのCP932だけを見た時は、それでいいかもしれないが、Unicodeとの変換をおこなう他の文字コードから見ればいい迷惑だ。つまるところ、文字コードのレベルでは本来解決できない事柄を、ムリヤリ文字コードで何とかしようとして、Unicodeの文字コードとしての一意性を破壊しているわけである。
文字コード関係の文句はソフトウェアベンダーに言うべきじゃないかなぁにもコメントしたが、結局YEN SIGN問題は、MS-DOS 2.0の実装において、MicrosoftがISO 646を全く理解していなかったために起こった問題だ。しかも、その問題をMicrosoft自身は、マジメに解決しようとしていない。UnicodeのU+005CやU+00A5を用いる全ての文字コードやそのユーザに、代価を押し付けようとしているだけである。
このページのすべての商標と著作権はそれぞれの所有者が有します。
コメントやユーザ日記に関しては投稿者が有します。
のこりのものは、© 2001-2009 OSDN です。
0x5cがエスケープ記号である限りは問題が起こっていたのではないでしょうか (スコア:1)
もちろん0x5cをバックスラッシュにして円記号にしなければ回避できたとは思いますが、日本国内事情を考えるとそれは不可能だったのではないでしょうか。
(円記号は必要でしたでしょうし、他に円記号が割り当てられている場所はありませんでしたから……たぶん)
最近はWindowsを使っていても0x5cはバックスラッシュとして表示されることも多いですから、そのうち気がつけば0x5cはバックスラッシュ、ということで落ち着くのかもしれません。
Re:0x5cがエスケープ記号である限りは問題が起こっていたのではないでしょうか (スコア:2, すばらしい洞察)
これに対しMS-DOS系では、各国ごとに異なる文字コードを0x00-0x7Fに規定してしまった、というのがそもそものミスです。しかも、そういう環境下においては、たとえばCやC++のプログラムを書く際にも、trigraph sequenceを使わなきゃいけないはずですが、そもそもC#にはtrigraphがない。そういう点で、Microsoftは文字コードの国際規格を全く無視してて、私はすごくキライなんです。
ただ、確かにMicrosoftだけが悪いんじゃなくて、Unicodeの方もどうかしてた、ってのは言えます。だって、JIS X 0201の0x5Cの「¥」と、GB 1988の0x24の「¥」と、ISO 8859-1の0xA5の「¥」とに、同じU+00A5を対応させちゃったんですから。Unicodeの常識から言えば、これらはそれぞれYEN SIGNとYUAN SIGNとYEN-YUAN SIGN(かしら?)という異なる文字であって、それぞれ別のコードが割り当てられて当然なんですよ。少なくとも、JIS X 0201の0x5Cと、ISO 8859-1の0xA5とで、異なるUnicodeが対応してたら、まだやりようがあったんじゃないかと思えるのです。
親コメント
W-ZERO3のInternet Explorer (スコア:1)