円記号問題の歴史をまとめました
ISO/IEC 646 の誕生
元々、文字コードの国際規格 ISO/IEC 646 では 0x5C
は国ごとに自由に設定してよい領域 だった
- アメリカ(
ascii
) では、0x5C
をバックスラッシュ - 日本(
JIS X 0201
) では、0x5C
を¥
アメリカで 0x5C
を特殊な用途に使う例が発生
- MS-DOSでは、
0x5C
をディレクトリ区切り記号 - C言語などでも、
0x5C
をエスケープシーケンス等の制御コードに
なんでわざわざ国ごとに異なる文字を特殊な用途つかうの...
そのため、日本では 0x5C
に2つの意味が...!
- 円記号
- ディレクトリ区切り記号やエスケープシーケンス等の制御コード
日本で SHIFT_JIS が生まれる
JIS X 0201
ベースなので、0x5C
は¥
のまま
欧州で文字コード規格 ISO/IEC 8859-1(Latin-1) が作られる
-
¥
は0xA5
世界の文字コードを統一すべく、unicode が生まれた
-
U+005C
は バックスラッシュ -
¥
は、U+00A5
windowsのunicode対応が始まる
- SHIFT_JIS(windowsだとcp932) から、unicodeに変換するときどうしよう?
¥
に2つの意味があるため、単純な変換はできない
そうだ! 💡 0x5C
も 0xA5
も ¥
を表示しよう💡
- なおキーボードで
¥
を入力すると0x5C
が入力される
そして悲劇へ...
日本語版windowsで円記号を入力しても、他の環境ではバックスラッシュに見える
見た目上バックスラッシュか円記号かわからないので、コードを書く時に混乱したり予期せぬエラーが発生する