Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
全角チルダ問題
Search
tsuda.a
July 05, 2014
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
全角チルダ問題
全角チルダ問題
tsuda.a
July 05, 2014
More Decks by tsuda.a
See All by tsuda.a
Git を GUI で使う話
tsudaahr
0
110
マジカルインクリメントと指数表記
tsudaahr
0
270
バックアップしていますか?
tsudaahr
0
150
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
170
NPUわからん
tsudaahr
0
220
計算量オーダーの話
tsudaahr
1
470
クラウド初学者が抱える不安について
tsudaahr
0
470
キューとは何か
tsudaahr
0
290
等幅は死んだ(ぇ
tsudaahr
0
140
Other Decks in Programming
See All in Programming
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
140
FDEが実現するAI駆動経営の現在地
gonta
2
280
Cloudflare is Agents
chimame
0
150
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
110
Google Apps Script で Ruby を動かす
kawahara
0
140
メールのエイリアス機能を履き違えない
isshinfunada
0
230
プロポーザルを書いてもらう
pvcresin
0
300
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
260
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
110
Android CLI
fornewid
0
210
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
670
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Deep Space Network (abreviated)
tonyrice
0
250
Ruling the World: When Life Gets Gamed
codingconduct
0
290
Automating Front-end Workflow
addyosmani
1369
210k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
56k
Making Projects Easy
brettharned
120
6.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
The Curse of the Amulet
leimatthew05
2
14k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
Designing for Timeless Needs
cassininazir
1
430
Transcript
全角チルダ問題 @tsuda_ahr LTDD#5 2014/7/5
今回のネタの発端 こんな書き込みを見つけまして。
全角チルダ ~
波ダッシュ 〜
違いがわかりしたね?
問い) どっちが波ダッシュ? ~ ~
答え) どっちも全角チルダ(汗
なんでこんなことに? • しらん
参考) 確かめかた (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 UTF SJIS 半角チルダ (0x7E) 全角チルダ (U+FF5E)
波ダッシュ (0x8160) 半角 - SJIS全角 変換 半角 - UTF全角 変換 波ダッシュ (U+301C) 使わない SJIS全角 - UTF全角 変換
でも本来的にはこうだよね 半角チルダ (0x7E) 全角チルダ (U+FF5E) 波ダッシュ (0x8160) SJIS全角 - UTF全角
変換 半角 - UTF全角 変換 波ダッシュ (U+301C) 波ダッシュ同士が 対応するべき 必要?(汗 ASCII UTF SJIS SJIS全角 - UTF全角 変換 半角 - SJIS全角 変換
• 処理系によって、変換方法が違う(汗 現実はこう Windows (CP932) の MAP 方法 Macとか? (ShiftJIS)
の MAP 方法 UTF SJIS 全角チルダ (U+FF5E) 波ダッシュ (0x8160) 波ダッシュ (U+301C)
何が起こるか? • データベースのキャラクターが Shift JIS • フロントエンド(Webページとか) は UTF •
Windows で入力した「~」はデータベースにどう記録されるのか? • iPad で入力した「~」はデータベースにどう記録されるのか? • 記録した文字を読みだして、それぞれの OS で表示させるとどうなる のか?
まとめ • Unicode の例示字形が間違ったのが混乱の源。 • 波ダッシュを全角チルダに充てたことが罪。 • そもそも、なぜ ShiftJIS 時代になかった全角文字が存在するのか…
• いまだに全角文字が使用されること自体も罪。 • 半角カナは今すぐ消えるべき。 文字コードの変換は闇。
ところで 全角チルダのコードですが、 U+FF5E って、やけに後ろのほうだと思いません?
こういうわけです。
半角形/全角形 • 互換用の領域。 • 互換文字とは、既存の文字コードとの互換性と往復変換のためだけに 収録された文字 • ユニコードコンソーシアムは、互換文字は使わないことを推奨 つまり、この領域の文字は使わないほうがよいです。 (極力使わないでください)
ご清聴ありがとうございました
余談 • LT後に質問などで答えたことをまとめておきます。
余談1) なぜ波ダッシュの例示字形を間違ったか? 縦書きの例示字形を 90° 回転させたから。 〜 〜 ちなみに縦/横 変換はいろいろなパターンがあるのです… 変換なし
… 一般の文字 左下⇔右上移動 … 句点/読点 90°回転 … 括弧、鍵括弧 多分、波ダッシュは例外ケース。
余談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