プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

それは典型的な波ダッシュ問題ではあるまいか このエントリーをはてなブックマークに追加

えー、どうも詳しい人同士で議論して初心者置いてきぼりモードに突入しているようなので、ここでおせっかいにも初心者向け解説を入れてみる

404 blog not foundの「Encode - 規格のバグまでは直せません 」より

b:note: Encodeのナゾ
最近会う機会が無いので、トラックバックします。

$moji = "~";
Encode::from_to($moji, "euc-jp", "utf8");
print $moji;

で出てきた文字をWindowsのメモ帳とか秀丸でみると、~の波形が反対になった文字になってしまいます。

ここでいう「~」はU+FF5E、Fullwidth Tildeのことです。



その答えは、「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は! 規格も実装も間違っているので! 大変なんだ! ランキング!

関連記事


文字コード | 【2006-05-10(Wed) 18:35:54】 | Trackback:(1) | Comments:(14)
コメント
「マイクロソフトがUnicode実装したときはまだ変換表とか公開されてないから」って、そうでしたっけ? 一応、私のページに『WAVE DASH問題縁起』ってのを書いてみましたので、よければごらん下さい。
2006-05-10 水 04:53:26 | URL | 安岡孝一 #eioMINxA [ 編集]

こちらですね。
http://slashdot.jp/~yasuoka/journal/357074

おお、素晴らしい資料だ。

で、ですね、僕は推測交じりで書いちゃったのですが、
マイクロソフトが始めてUnicodeを採用したWindowsNT3.1の発売が1994年。
(wikipediaの WindowsNTより http://ja.wikipedia.org/wiki/Microsoft_Windows_NT

で、フォントの発注とかを考えると、マイクロソフト社内の開発上のデッドラインは2年前(ぎりぎり粘って1年前)ってとこじゃないのー。と思い、しょーがねーべ、という論調で書きました。

こちらについても、なにか証拠とか残っていればぜひとも教えてくださいませ。
ではでは
2006-05-10 水 05:02:24 | URL | 革命の日々 #- [ 編集]

さっきコメントを書いている段階ではまるで気がつきませんでしたが、「インターネット時代の文字コード」持ってます。
知らないうちにとてもお世話になっているオヒトでした。
ああ、恐れ多い。

まさに、まんじゅう怖い! 現象(それちがう)
2006-05-10 水 05:24:36 | URL | 革命の日々 #- [ 編集]

>(なぜかこの下にどえらい余白が出来ているが直せない。ごめん)
たぶん、<TABLE>から</TABLE>の間に<BR>が入っている(</TR>とか</TD>のあとに<BR>)のが原因かと。
自動で<BR>が挿入されるなら、
<TABLE>から</TABLE>までを1行で書いたら空白は消えると思います(ソースは見づらくなるし、書きづらくなるけど)。
絶対とは言いきれませんが…。
2006-05-10 水 07:40:52 | URL | khiker #- [ 編集]
あ、『インターネット時代の文字コード』お買い上げ、どうもありがとうございます。またよければ『文字符号の歴史 欧米と日本編』もご検討ください。

で、えっと、えっと、Windows NT 3.1日本語版なのですが、これ、私の記憶が確かなら、1994年1月発売なんですよね。だとすると、おっしゃるとおり、確かに変換表は『公開』されてません。うん。

ただ、UCS調査研究委員会WG1には、マイクロソフトから松沢高志さんが委員として参加してますから、WAVE DASHのことは事前に知ってたはずなんですよ。それに、Windows NT 3.1は韓国語版もあったので、それは当然『ハングルの大移動』を経験してるわけです。それに較べれば、1字や2字の対応表入れ換えくらい、何とかならなかったのかなぁ…。
2006-05-10 水 08:10:15 | URL | 安岡孝一 #eioMINxA [ 編集]

khikerさん>
ありがとうございます。でもやってみてもダメだったんですよ~
不思議不思議

安岡さん>
いや、1文字でも入れ替えたら僕は1ユーザの立場としては猛抗議してたと思いますよ。

メーカーやプログラマが楽をするために、なんでユーザーが文字化けに苦しまななあかんねん。と

#もっとも今は作るほうの立場になっちゃったので大夫自分に都合よく思想が変更されてきておりますが(^^;


また94年だとインターネット普及前なので

互換性>>>>(越えられない壁)>>>他OSと同じ変換ルール

とMS社内で判断されていたことは想像に難くありません。
で、NT系ってNT4の時期が強烈に長かったので、いいタイミングがないんですよね。
Windows 2000で変えるには手遅れっぽい気がするし、まさかサービスパックでごろりと変えてしまうわけにも行かないし。
むむむ・・・
2006-05-10 水 09:03:26 | URL | 革命の日々 #- [ 編集]

リファラ解析でみつけた「電波・・とどいた?」さんの記事、2年前の記事なのにオイラのよりはるかに良く出来ている。
凹んだ。

http://www.denpa.org/~go/denpa/200402/from01.html#01_2
2006-05-10 水 09:56:00 | URL | 革命の日々 #- [ 編集]

先生!プログラムの話はわけわがんないので!2ちゃんネタお願いします!!!
くわがた以来のヒットを!
2006-05-10 水 20:40:56 | URL | めけ #- [ 編集]

ヒットを僕がたまたま見つけれるかは運の問題ですからの~ww
2006-05-10 水 20:42:23 | URL | 革命の日々 #- [ 編集]

初心者おいてけぼりがじぇんじぇん改善されてねーな( ̄ー ̄)y━・~~~
ヽ(Д`ヽ)ワケ(ノ´Д)ノワカヽ(´Д`)ノラン♪
2006-05-11 木 12:28:05 | URL | mink #- [ 編集]

エェェ(´д`)ェェエ

これでも元記事よりは大夫改善されてるんですよぉorz
いちおう規格を持ってない人にも分かるように配慮してるじゃんかーーー
(と、自己弁護してみるテスト)
2006-05-11 木 19:08:32 | URL | 革命の日々 #- [ 編集]
>いや、1文字でも入れ替えたら僕は1ユーザの立場としては猛抗議してたと思いますよ。

実は、少なくとも3字は入れ替わってるんじゃないかと。詳しくは私のページの『WAVE DASH問題縁起』のコメント欄を、ごらん下さい。
2006-05-14 日 19:34:46 | URL | 安岡孝一 #eioMINxA [ 編集]

見ました。
かなりショックを受けました。うががが

ところで、この話が成立するためにはすくなくとも、MS明朝・MSゴシックで変更元と変更先で見た目が同じでないとつじつまが合いませんよね。
なんとかして、追試できないかしら。

でないと実装を変えたのか、公開したスペック(だけ)が間違っていたのか一抹の不安が残りませんか
2006-05-14 日 20:28:14 | URL | 革命の日々 #- [ 編集]
このコメントは管理人のみ閲覧できます
2007-09-02 日 13:22:04 | | # [ 編集]
おいどん、またしても太っちゃいました。運動してないからなのかな。それとも食べすぎなのかな。でも、食べなきゃ元気でないし、動けば疲れて筋肉痛。世の中ってひどくないか?だって、俺にばかりこんな残…
【2006-05-17 Wed 00:01:54】 | anime(禿)hage
  1. 無料アクセス解析