えー、どうも詳しい人同士で議論して初心者置いてきぼりモードに突入しているようなので、ここでおせっかいにも初心者向け解説を入れてみる
404 blog not foundの「Encode - 規格のバグまでは直せません 」より
まず、用語をはっきりさせよう。
今、Windowsマシンで普通に打てる全角波線(~)はJIS X 208(いわゆる第一、第ニ水準)に含まれる波ダッシュ(WAVE DASH)という文字です。
つまり、我々が普段使っている日本語Windowsマシンで全角のチルダや半角の波線は存在しない(事になっている)
でも、まあカタチが似てるからみんなごった煮で使うんだけど。
で、JIS X 212、いわゆる補助漢字の規格で全角のチルダ(Full Width Tilda)が追加されてます。
んで、下の表はwikipediaのチルダの項から拝借してきたのだけどMS WindowsのフォントだとWAVE DASHはチルダとは波が逆になっている。
(なぜかこの下にどえらい余白が出来ているが直せない。ごめん)
ま、波打ってる線には違いないから文句をいわれる筋合いはありませんな。
wikipediaの波ダッシュの項を見ると規格で逆向きが正しいんだ~みたいな事が書いてあるので調べてみると
Unicode 3.0(ごめん最新版は持ってないの)の例示字体は確かに逆。
でもJIS X 221:1995(UnicodeのISO規格がISO10646でJIS X 221はその翻訳)ではチルダと同じ向きになっている。
JIS X 221はこの件に限らずUnicode Specificatonと細かなところが色々違うので油断できない。
はっはっは(笑い事じゃないんだけど)
で、話を戻すと、WindowsのフォントはUnicode式に逆向き表示。
なぜ、この逆向きっぷりが普段だれにも気づかれないかというと、Windows APIを使う限りにおいて、なぜか
JIS X 208 WAVE DASH ←→ Unicode Full Width Tilda
という変換がされてるんですな。
ま、Unicode Specificationの表見ながら文字の意味とか考えずに、グリフが近いやつを選ぶとこうなりそうだ。
マイクロソフトがUnicode実装したときはまだ変換表とか公開されてないからUnicodeコンソーシアムの変換表とはこれに限らずいろいろと違う動きをする。
はっはっは(笑い事じゃないってば)
さて、ここまで説明すると何が起こっているのかもうわかっていただけたと思う。
EncodeはJIS X 208 WAVE DASHをUnicode WAVE DASHに変換する。Windowsではそれはチルダとは逆向きの波線に見えるが、Xで表示させるとチルダと同じ向きの波線に見える。
波線がタテマエである以上、どっちも間違ってないのだ。
コレデイイノダ!
・・・ってDANさん。元々の話はJIS X 212(補助漢字)のFull Width Tildaとは全然違う話をしているように見えますが?
結論も僕はちょっと違うと思っていて、Windows以外でもEncode::EUCJPMSを使っておけばどんなフォントでもチルダ形の形に見えてよくありまsん?
Yen problemと違って全角文字はプログラム言語等で特別な意味を持っていないので見た目優先でええんとちゃうかなー
P.S.
この原稿の初期バージョンではUnicode Specificatonの最新を持ってないのを規格書を個人で持ってるなんて変態だ。と書いていただが、よく考えたらUnicode3.0、JIS X 208、JIS X 212、JIS X 221とオウチにそろってる時点で自爆以外の何者でもないので、謹んで削除させていただいた。
はっはっは
Unicodeは! 規格も実装も間違っているので! 大変なんだ! ランキング!
404 blog not foundの「Encode - 規格のバグまでは直せません 」より
ここでいう「~」はU+FF5E、Fullwidth Tildeのことです。b:note: Encodeのナゾ
最近会う機会が無いので、トラックバックします。
$moji = "~";
Encode::from_to($moji, "euc-jp", "utf8");
print $moji;
で出てきた文字をWindowsのメモ帳とか秀丸でみると、~の波形が反対になった文字になってしまいます。
その答えは、「Unicode Consortiumが用意したJISX0212とUnicodeの変換表がそうだったから」ということになります。Encodeのせいではないのです。
まず、用語をはっきりさせよう。
今、Windowsマシンで普通に打てる全角波線(~)はJIS X 208(いわゆる第一、第ニ水準)に含まれる波ダッシュ(WAVE DASH)という文字です。
つまり、我々が普段使っている日本語Windowsマシンで全角のチルダや半角の波線は存在しない(事になっている)
でも、まあカタチが似てるからみんなごった煮で使うんだけど。
で、JIS X 212、いわゆる補助漢字の規格で全角のチルダ(Full Width Tilda)が追加されてます。
んで、下の表はwikipediaのチルダの項から拝借してきたのだけどMS WindowsのフォントだとWAVE DASHはチルダとは波が逆になっている。
(なぜかこの下にどえらい余白が出来ているが直せない。ごめん)
記号 | Unicode | 実体参照 | 名称 |
---|---|---|---|
~ | U+FF5E | ~ ~ | fullwidth tilde |
〜 | U+301C | 〜 〜 | wave dash |
ま、波打ってる線には違いないから文句をいわれる筋合いはありませんな。
wikipediaの波ダッシュの項を見ると規格で逆向きが正しいんだ~みたいな事が書いてあるので調べてみると
Unicode 3.0(ごめん最新版は持ってないの)の例示字体は確かに逆。
でもJIS X 221:1995(UnicodeのISO規格がISO10646でJIS X 221はその翻訳)ではチルダと同じ向きになっている。
JIS X 221はこの件に限らずUnicode Specificatonと細かなところが色々違うので油断できない。
はっはっは(笑い事じゃないんだけど)
で、話を戻すと、WindowsのフォントはUnicode式に逆向き表示。
なぜ、この逆向きっぷりが普段だれにも気づかれないかというと、Windows APIを使う限りにおいて、なぜか
JIS X 208 WAVE DASH ←→ Unicode Full Width Tilda
という変換がされてるんですな。
ま、Unicode Specificationの表見ながら文字の意味とか考えずに、グリフが近いやつを選ぶとこうなりそうだ。
マイクロソフトがUnicode実装したときはまだ変換表とか公開されてないからUnicodeコンソーシアムの変換表とはこれに限らずいろいろと違う動きをする。
はっはっは(笑い事じゃないってば)
さて、ここまで説明すると何が起こっているのかもうわかっていただけたと思う。
EncodeはJIS X 208 WAVE DASHをUnicode WAVE DASHに変換する。Windowsではそれはチルダとは逆向きの波線に見えるが、Xで表示させるとチルダと同じ向きの波線に見える。
波線がタテマエである以上、どっちも間違ってないのだ。
コレデイイノダ!
・・・ってDANさん。元々の話はJIS X 212(補助漢字)のFull Width Tildaとは全然違う話をしているように見えますが?
結論も僕はちょっと違うと思っていて、Windows以外でもEncode::EUCJPMSを使っておけばどんなフォントでもチルダ形の形に見えてよくありまsん?
Yen problemと違って全角文字はプログラム言語等で特別な意味を持っていないので見た目優先でええんとちゃうかなー
P.S.
この原稿の初期バージョンではUnicode Specificatonの最新を持ってないのを規格書を個人で持ってるなんて変態だ。と書いていただが、よく考えたらUnicode3.0、JIS X 208、JIS X 212、JIS X 221とオウチにそろってる時点で自爆以外の何者でもないので、謹んで削除させていただいた。
はっはっは
Unicodeは! 規格も実装も間違っているので! 大変なんだ! ランキング!
コメント
コメント一覧 (14)
http://slashdot.jp/~yasuoka/journal/357074
おお、素晴らしい資料だ。
で、ですね、僕は推測交じりで書いちゃったのですが、
マイクロソフトが始めてUnicodeを採用したWindowsNT3.1の発売が1994年。
(wikipediaの WindowsNTより http://ja.wikipedia.org/wiki/Microsoft_Windows_NT)
で、フォントの発注とかを考えると、マイクロソフト社内の開発上のデッドラインは2年前(ぎりぎり粘って1年前)ってとこじゃないのー。と思い、しょーがねーべ、という論調で書きました。
こちらについても、なにか証拠とか残っていればぜひとも教えてくださいませ。
ではでは
知らないうちにとてもお世話になっているオヒトでした。
ああ、恐れ多い。
まさに、まんじゅう怖い! 現象(それちがう)
たぶん、<TABLE>から</TABLE>の間に<BR>が入っている(</TR>とか</TD>のあとに<BR>)のが原因かと。
自動で<BR>が挿入されるなら、
<TABLE>から</TABLE>までを1行で書いたら空白は消えると思います(ソースは見づらくなるし、書きづらくなるけど)。
絶対とは言いきれませんが…。
で、えっと、えっと、Windows NT 3.1日本語版なのですが、これ、私の記憶が確かなら、1994年1月発売なんですよね。だとすると、おっしゃるとおり、確かに変換表は『公開』されてません。うん。
ただ、UCS調査研究委員会WG1には、マイクロソフトから松沢高志さんが委員として参加してますから、WAVE DASHのことは事前に知ってたはずなんですよ。それに、Windows NT 3.1は韓国語版もあったので、それは当然『ハングルの大移動』を経験してるわけです。それに較べれば、1字や2字の対応表入れ換えくらい、何とかならなかったのかなぁ…。
ありがとうございます。でもやってみてもダメだったんですよ~
不思議不思議
安岡さん>
いや、1文字でも入れ替えたら僕は1ユーザの立場としては猛抗議してたと思いますよ。
メーカーやプログラマが楽をするために、なんでユーザーが文字化けに苦しまななあかんねん。と
#もっとも今は作るほうの立場になっちゃったので大夫自分に都合よく思想が変更されてきておりますが(^^;
また94年だとインターネット普及前なので
互換性>>>>(越えられない壁)>>>他OSと同じ変換ルール
とMS社内で判断されていたことは想像に難くありません。
で、NT系ってNT4の時期が強烈に長かったので、いいタイミングがないんですよね。
Windows 2000で変えるには手遅れっぽい気がするし、まさかサービスパックでごろりと変えてしまうわけにも行かないし。
むむむ・・・
凹んだ。
http://www.denpa.org/~go/denpa/200402/from01.html#01_2
くわがた以来のヒットを!
ヽ(Д`ヽ)ワケ(ノ´Д)ノワカヽ(´Д`)ノラン♪
これでも元記事よりは大夫改善されてるんですよぉorz
いちおう規格を持ってない人にも分かるように配慮してるじゃんかーーー
(と、自己弁護してみるテスト)
実は、少なくとも3字は入れ替わってるんじゃないかと。詳しくは私のページの『WAVE DASH問題縁起』のコメント欄を、ごらん下さい。
かなりショックを受けました。うががが
ところで、この話が成立するためにはすくなくとも、MS明朝・MSゴシックで変更元と変更先で見た目が同じでないとつじつまが合いませんよね。
なんとかして、追試できないかしら。
でないと実装を変えたのか、公開したスペック(だけ)が間違っていたのか一抹の不安が残りませんか
<a href= http://www.angelfire.com/aoyobu/1.html >I</a>
http://www.angelfire.com/aoyobu/2.html
革命の日々