見た目は同じなのに別人!?「波ダッシュ」と「全角チルダ」問題を解説
見た目は同じなのに別人!?「波ダッシュ」と「全角チルダ」問題を解説
「東京~大阪」「2024/01/01~2024/12/31」
こんな表記、日常的に見かけますよね。でも実は、この「~」という文字には2種類あって、それがエンジニアや組版関係者を長年悩ませてきた問題があるんです。今回は、この「波ダッシュ・全角チルダ問題」について解説します。
そもそも「波ダッシュ」と「全角チルダ」って何?
見た目がほぼ同じこの2つの文字、実は全く異なる文字です。
波ダッシュ(〜)は、日本語で「から」を表す約物です。「明治〜大正」のように範囲を示したり、長音符として使われます。Unicodeでは U+301C が割り当てられています。
一方、全角チルダ(~)は、半角チルダ(~)の全角版です。本来は数学で「漸近的に等しい」ことを表す記号で、プログラミングではホームディレクトリを示したりする用途があります。Unicodeでは U+FF5E です。
つまり、日本語で「○○~○○」と書くときは、本来「波ダッシュ」を使うのが正しいわけです。
問題の発端:Unicodeの字形ミス
この問題の発端は、なんとUnicode仕様書のミスでした。
波ダッシュは本来「上がって下がる」字形、つまり左が上で右が下の形です。ところがUnicode 7.0以前の仕様書では、これが逆の「下がって上がる」字形として定義されてしまっていました。
Microsoftは、このUnicode仕様書をそのまま採用。結果として、Windows XP以前のMS明朝やMSゴシックでは、波ダッシュが本来とは逆向きの字形で表示されていました。
Windowsの苦肉の策:全角チルダへの誘導
ここでMicrosoftは苦しい選択を迫られます。波ダッシュの字形を独自に修正すると互換性の問題が生じる。そこで採用されたのが「全角チルダ推し」という方針でした。
具体的には、日本語入力で「から」と入力して変換すると、波ダッシュではなく全角チルダが優先的に出るようになっています。これは現在のWindows 11でも変わっていません。
一方、macOSでは「から」を変換すると波ダッシュが出力されます。
ここに悲劇の種がありました。
現場で起きる悲劇
WindowsとMacが混在する環境では、同じ「~」に見える文字が実は混在することになります。これが様々な問題を引き起こします。
文字検索で引っかからない:
データベースで「東京~大阪」と検索しても、全角チルダで登録されたデータは波ダッシュでは検索できません(逆も然り)。
文字化け:
Shift_JISとUTF-8を行き来する環境で、波ダッシュが「?」や「□」に化けることがあります。
APIエラー:
あるエンジニアの体験談では、APIに値を送信する際に「~」が入っている値だけエラーになり、原因究明に時間を費やしたそうです。
データ不整合:
同じ商品名なのに、片方は波ダッシュ、片方は全角チルダで登録されていて、集計結果がおかしくなるケース。
Unicodeの修正、でも問題は続く
2015年のUnicode 8.0で、波ダッシュの字形は「上がって下がる」に修正されました。Windows Vistaからはフォントの字形も正しくなっています。
しかし、文字コードの対応関係はそのまま。つまり、Windowsでは正しい字形で波ダッシュを表示できるようになったものの、普通に入力すると依然として全角チルダが出力されるという、非常にややこしい状態が続いています。
開発者向け:対処法まとめ
この問題に対処するためのTipsをいくつか紹介します。
入力値の正規化:システムに入ってくるデータは、波ダッシュか全角チルダのどちらかに統一するのが鉄則です。
python
検索時の考慮:
検索機能を実装する際は、両方の文字にマッチするようにするか、検索前に正規化する処理を入れましょう。
HTMLでの数値文字参照:
Webサイトで確実に表示したい場合は、数値文字参照を使う手もあります。
波ダッシュ:〜
全角チルダ:~
文字コードの確認方法:
問題が発生したら、まずは該当文字のコードポイントを確認しましょう。
javascript
まとめ
波ダッシュと全角チルダ問題は、Unicodeの字形ミスとWindowsの互換性重視の対応が重なって生まれた、日本語特有の厄介な問題です。
見た目では判別がほぼ不可能なため、WindowsとMacが混在する環境や、複数のシステム間でデータをやり取りする場面では特に注意が必要です。
対策としては、システム内で使用する文字を統一するルールを設け、入力時に正規化処理を入れるのが現実的でしょう。
何気なく使っている「~」という文字に、こんな深い沼があったとは…。文字コードの世界は奥が深いですね。
0コメント