全角チルダ問題@tsuda_ahr
LTDD#5 2014/7/5
2014/7/7 改訂2版
今回のネタの発端
こんな書き込みを見つけまして。
全角チルダ
~
波ダッシュ
〜
違いがわかりましたね?
問い) どっちが波ダッシュ?
~ ~
答え)
どっちも全角チルダ(汗
なんでこんなことに?
• しらん
参考) 確かめかた (Windows の場合)
• 確かめたい文字をコピーします。
• WordPad を起動し、コピーした文字を貼り付けます。
• 確かめたい文字を一文字選択し、ALT + X を押します。
• コード (UCS-4) が表示されます。
• U+301C が波ダッシュ
• U+FF5E が全角チルダ
基礎知識1) チルダとは何か?
• こういうやつらしい。
ÃÕÑ• 鼻音に関する音をあらわす、ダイアクリティカルマークの一種
• ダイアクリティカルマークってこんなやつら (よくしらない)
À Á Â Ä Å Ă Ą Āhttp://ja.wikipedia.org/wiki/%E3%83%80%E3%82%A4%E3%82%A2%E3%82%AF%E3%83%AA%E3%83
%86%E3%82%A3%E3%82%AB%E3%83%AB%E3%83%9E%E3%83%BC%E3%82%AF
基礎知識2) ダッシュとは何か
• これではない (らしい)
A’• ダッシュとはこういうやつ (らしい)
—
これは「プライム」というのが正解らしい…
ダッシュって何に使う記号?
• ダッシュ (emダッシュ)
文と文の間、字句と字句の間に用いられて、時間の経過を表す
単語の後に用いられて省略を表す
用例)
もう——だめだ。
たとえデスマーチになろうと ——
ダッシュ(enダッシュ) /ハイフン/マイナスの違い
• 1 – 5 (ダッシュ) 1 から 5
• 1 – 5 (ハイフン) 1 の 5
• 1 – 5 (マイナス) 1 ひく 5
わけがわからん(汗http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5
_(%E8%A8%98%E5%8F%B7)
Shift JIS (CP932) 時代
• 全角チルダはない。
• あったのは波ダッシュ。
• なので、全角/半角変換の際は、
~ (半角チルダ) は ~ (波ダッシュ) と交換してた ???
Unicode になってから
~ 〜
全角チルダ( Yu Gothic )
波ダッシュ
( Arial Unicode MS )
なんで?
• Unicode の例示字形を載せる際に間違えたらしい(汗
• Windows XP 以前の 波ダッシュ(U+301C) はこの字形。
• よって、波ダッシュを使用すると、今まで使っていた字形と違うもの
が表示されることになってしまう。
しかし規格書の字形例示は、今なお変更なし?
http://www.unicode.org/charts/PDF/U3000.pdf
規格はそうだが…
でも、さすがに
「〜」
は嫌ですよね?
対策?
じゃあ波ダッシュ「〜」じゃなくて、全角チルダ「~」のほうを
使えばいいんじゃね?
↓
いいことに気が付いた! ウハwww 俺天才wwwww
かくて Windows では 波ダッシュ が U+FF5C (=全角チルダ) に…
状況を予想するに、字形は Unicode 仕様書に準拠する以上変更ができないのに対して、・Shift JIS の 波ダッシュ を Unicode の何に対応させるかとか、・”~” の字形に相当する記号を MS-IME で何を候補として出すのかは、
規格があるわけではないので、”~”を 全角チルダに充てるのが一番ストレスがなかった、ってことではないかと…
かくてこういう関係が成り立つ
Windows の場合
ASCII UTFSJIS
半角チルダ(0x7E)
全角チルダ(U+FF5E)
波ダッシュ(0x8160)
半角 - SJIS全角 変換
半角 - UTF全角 変換
波ダッシュ(U+301C)
使わない
SJIS全角 - UTF全角変換
でも本来的にはこうだよね
半角チルダ(0x7E)
全角チルダ(U+FF5E)
波ダッシュ(0x8160)
SJIS全角 - UTF全角変換
半角 - UTF全角 変換
波ダッシュ(U+301C)
波ダッシュ同士が対応するべき
必要?(汗
ASCII UTFSJIS
SJIS全角 - UTF全角変換
半角 - SJIS全角 変換
• 処理系によって、変換方法が違う(汗
現実はこう
Windows (CP932)の MAP 方法
Macとか? (ShiftJIS)の MAP 方法
UTFSJIS
波ダッシュ(0x8160)
波ダッシュ(U+301C)
全角チルダ(U+FF5E)
何が起こるか?
• データベースのキャラクターが Shift JIS
• フロントエンド(Webページとか) は UTF
• Windows で入力した「~」はデータベースにどう記録されるのか?
• iPad で入力した「~」はデータベースにどう記録されるのか?
• 記録した文字を読みだして、それぞれの OS で表示させるとどうなる
のか?
まとめ
• Unicode の例示字形が間違ったのが混乱の源。
• 波ダッシュを全角チルダに充てたことが罪。
• そもそも、なぜ ShiftJIS 時代になかった全角文字が存在するのか…
• いまだに全角文字が使用されること自体も罪。
• 半角カナは今すぐ消えるべき。
文字コードの変換は闇。
ところで
全角チルダのコードですが、
U+FF5E
って、やけに後ろのほうだと思いません?
こういうわけです。
半角形/全角形
• 互換用の領域。
• 互換文字とは、既存の文字コードとの互換性と往復変換のためだけに
収録された文字
• ユニコードコンソーシアムは、互換文字は使わないことを推奨
つまり、この領域の文字は使わないほうがよいです。
(極力使わないでください)
ご清聴ありがとうございました
余談
• LT後に質問などで答えたことをまとめておきます。
縦書きの例示字形を 90° 回転させたから。
余談1) なぜ波ダッシュの例示字形を間違ったか?
〜
〜ちなみに縦/横 変換はいろいろなパターンがあるのです…
変換なし … 一般の文字左下⇔右上移動 … 句点/読点90°回転 … 括弧、鍵括弧
多分、波ダッシュは例外ケース。
http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3
%83%A5#Unicode.E3.81.AB.E9.96.A2.E9.80.A3.E3.81.99.E3.82.8B.E5.95.8F.E9.A1.8C
余談2) ダッシュは日本語?
• ダッシュ記号は、一般句読点(General Punctuation)と呼ばれる
U+2000~U+206F の領域にあります。
• 日本語のグループではありません。
• ちなみに ”横の線” な記号は、たとえば以下のものがあります。(以下がすべてではない)
- U+002D Hyphen-Minus‐ U+2010 Hyphen- U+2011 Non-Breaking Hyphen‐ U+2012 Figure Dash– U+2013 En Dash— U+2014 Em Dash― U+2015 Horizontal Barー U+30FC Katakana-Hiragana Prolonged Sound Mark (長音記号)─ U+2500 Box Drawings Light Horizontal (罫線)━ U+2501 Box Drawings Heavy Horizontal (罫線)一 U+4E00 いち (漢数字)
余談3) 長音記号はいつから使われ始めたか?
• わかりません(汗
• 歴史的かなづかいでは使われてないよね?
• 多分明治から。http://ja.wikipedia.org/wiki/%E9%95%B7%E9%9F%B3%E7%AC%A6#.E9.95.B7.E9.9F.B3.E7
.AC.A6.E3.81.AE.E6.AD.B4.E5.8F.B2
• 調べたところによると、初出は新井白石らしい。http://www.shochian.com/cho‘onpu.htm
余談4) ¥記号とか
• この手の問題は、波ダッシュやダッシュに限らず、その他にもいろい
ろ出てきます。注意しましょう。
• ¥ 記号も同様です。
• 特に ¥ 記号は暗黙に変換されたりする場合があるので気を付けま
しょう。
¥ U+005C Reverse Solidus (Backslash)¥ U+00A5 Yen Sign¥ U+FFE5 Fullwidth Yen Sign