波ダッシュ・全角チルダ問題
目次
波ダッシュ・全角チルダ問題
シフトJISの「~」の文字を Unicode と相互変換する場合に処理系によって 波ダッシュ(U+301C) だったり 全角チルダ(U+FF5E) だったりなど混乱が生じている問題です。
文字 | 波ダッシュ | 全角チルダ |
---|---|---|
表示 | 〜 | ~ |
名前 | WAVE DASH | FULLWIDTH TILDE |
Unicode | U+301C | U+FF5E |
JIS X 0208 | 1-33 | (なし) |
JIS X 0213 | 1-33 | 1-2-18 |
UTF-8 | 0xE3 0x80 0x9C | 0xEF 0xBD 0x9E |
Shift_JIS(JIS X 0208) | 0x81 0x60 | (なし) |
Shift_JIS(JIS X 0213) | 0x81 0x60 | 0x81 0xB0 |
CP932 | (なし) | 0x81 0x60 |
- 波ダッシュは「上がって下がる」字形で中国や日本では長音符や「~から」を示す文字として使用されます。
- しかし Unicode 7.0 以前では「上がって下がる」ではなく「下がって上がる」字形として定義されていました(字形誤り)。
- これは Unicode 8.0 で「下がって上がる」字形から「上がって下がる」に修正されました。
- Windows XP 以前では「下がって上がる」表記、Windows Vista 以降では「上がって下がる」表記となります。
- 上記の理由からか Windows では今でも「~から」を示す文字として波ダッシュではなく全角チルダを用いています。
- JIS準拠の Shift_JIS では 0x81 0x60 を U+301C とみなします。
- Windows版シフトJISの CP932 では 0x81 0x60 を U+FF5E とみなします。
- 0x81 0x60 を U+301C とみなす処理系と U+FF5E とみなす処理系が混在するため今でも混乱が残っています。
Windows(CP932) U+301C ⇒ ERROR / U+FF5E ⇒ 0x81 0x60 / 0x81 0x60 ⇒ U+FF5E Mac U+301C ⇒ 0x81 0x60 / U+FF5E ⇒ ERROR / 0x81 0x60 ⇒ U+FF5E iconv(Shift_JIS) U+301C ⇒ 0x81 0x60 / U+FF5E ⇒ ERROR / 0x81 0x60 ⇒ U+301C / 0x81 0xB0 ⇒ ERROR iconv(Shift_JISX2013) U+301C ⇒ 0x81 0x60 / U+FF5E ⇒ 0x81 0xB0 / 0x81 0x60 ⇒ U+301C / 0x81 0xB0 ⇒ U+FF5E iconv(CP932) U+301C ⇒ 0x81 0x60 / U+FF5E ⇒ 0x81 0x60 / 0x81 0x60 ⇒ U+FF5E / 0x81 0xB0 ⇒ ERROR Oracle(JA16SJIS) U+301C ⇒ 0x81 0x60 / U+FF5E ⇒ 0x81 0x60 / 0x81 0x60 ⇒ U+301C Oracle(JA16SJISTILDE) U+301C ⇒ 0x81 0x60 / U+FF5E ⇒ 0x81 0x60 / 0x81 0x60 ⇒ U+FF5E Ruby(Shift_JIS) U+301C ⇒ 0x81 0x60 / U+FF5E ⇒ ERROR / 0x81 0x60 ⇒ U+301C Ruby(CP932) U+301C ⇒ ERROR / U+FF5E ⇒ 0x81 0x60 / 0x81 0x60 ⇒ U+FF5E Python(Shift_JIS) U+301C ⇒ 0x81 0x60 / U+FF5E ⇒ ERROR / 0x81 0x60 ⇒ U+301C Python(CP932) U+301C ⇒ 0x81 0x60 / U+FF5E ⇒ 0x81 0x60 / 0x81 0x60 ⇒ U+FF5E
バックスラッシュ・円マーク問題
半角文字の 0x5C が環境によって バックスラッシュ(\) だったり 円マーク(¥) だったりなど混乱が生じている問題です。
文字 | バックスラッシュ | 円マーク |
---|---|---|
表示 | \ | ¥ |
名前 | REVERSE SOLIDUS | YEN SIGN |
Unicode | U+005C | U+00A5 |
JIS X 0201 | (なし) | 0-92 ※1 |
UTF-8 | 0x5C | 0xC2 0xA5 |
Shift_JIS | (なし) | 0x5C |
- 米国の ASCII など世界的には 0x5C にはバックスラッシュが割り当てられています。
- しかし日本の JIS X 0201 では 0x5C に円マークを割り当てています。
- Windows ではフォントによってバックスラッシュで表示されたり、円マークで表示されたりします。
- おおむね英語フォントではバックスラッシュ、日本語フォントでは円マークになります。
\ ... Courier New \ ... Times New Roman \ ... Consolas \ ... MS ゴシック \ ... メイリオ \ ... 游ゴシック
- iconv の Shift_JIS 変換など、処理系によっては 0x5C を U+00A5 に変換するものがあるので注意が必要です。
Windows(CP932) 0x5C ⇒ U+005C / U+005C ⇒ 0x5C / U+00A5 ⇒ ERROR iconv(Shift_JIS) 0x5C ⇒ U+00A5 / U+005C ⇒ 0x5C / U+00A5 ⇒ 0x5C iconv(CP932) 0x5C ⇒ U+005C / U+005C ⇒ 0x5C / U+00A5 ⇒ 0x5C Ruby(Shift_JIS) 0x5C ⇒ U+005C / U+005C ⇒ 0x5C / U+00A5 ⇒ ERROR Ruby(CP932) 0x5C ⇒ U+005C / U+005C ⇒ 0x5C / U+00A5 ⇒ ERROR Python(Shift_JIS) 0x5C ⇒ U+005C / U+005C ⇒ 0x5C / U+00A5 ⇒ 0x5C Python(CP932) 0x5C ⇒ U+005C / U+005C ⇒ 0x5C / U+00A5 ⇒ ERROR
チルダ・オーバーライン問題
半角文字の 0x7E が環境によって チルダ(~) だったり オーバーライン(‾) だったりなど混乱が生じている問題です。
文字 | チルダ | オーバーライン |
---|---|---|
表示 | ~ | ‾ |
名前 | TILDE | OVERLINE |
Unicode | U+007E | U+203E |
JIS X 0201 | (なし) | 0-126 |
UTF-8 | 0x7E | 0xE2 0x80 0xBE |
Shift_JIS | (なし) | 0x7E |
- 米国の ASCII など世界的には 0x7E にはチルダが割り当てられています。
- しかし日本の JIS X 0201 では 0x7E にオーバーラインを割り当てています。
- 表示は英語フォントでも日本語フォントでもチルダが表示されることが多いようです。
- iconv の Shift_JIS 変換など、処理系によっては 0x7E を U+203E に変換するものがあるので注意が必要です。
Windows(CP932) 0x7E ⇒ U+007E / U+007E ⇒ 0x7E / U+203E ⇒ ERROR iconv(Shift_JIS) 0x7E ⇒ U+203E / U+007E ⇒ 0x7E / U+203E ⇒ 0x7E iconv(CP932) 0x7E ⇒ U+007E / U+007E ⇒ 0x7E / U+203E ⇒ 0x7E Ruby(Shift_JIS) 0x7E ⇒ U+007E / U+007E ⇒ 0x7E / U+203E ⇒ ERROR Ruby(CP932) 0x7E ⇒ U+007E / U+007E ⇒ 0x7E / U+203E ⇒ ERROR Python(Shift_JIS) 0x7E ⇒ U+007E / U+007E ⇒ 0x7E / U+203E ⇒ 0x7E Python(CP932) 0x7E ⇒ U+007E / U+007E ⇒ 0x7E / U+203E ⇒ ERROR
サマリ
- Unicode と シフトJIS を変換する場合、仕様書に厳密に従うなら Shift_JIS エンコーディングを使用するべき。
- ただし、iconv の Shift_JIS は半角のチルダや円マークを別の文字に変換してしまうので注意が必要。
- Windows との互換性を考慮すると Shift_JIS ではなく CP932 を使用する方がよさそう。
リンク
Copyright (C) 2022 杜甫々
初版:2022年10月16日 最終更新:2022年10月16日
https://www.tohoho-web.com/ex/dash-tilde.html