kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

円記号問題の歴史

円記号問題の歴史をまとめました

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つの意味があるため、単純な変換はできない

そうだ! 💡 0x5C0xA5¥ を表示しよう💡

  • なおキーボードで ¥ を入力すると 0x5C が入力される

そして悲劇へ...

日本語版windowsで円記号を入力しても、他の環境ではバックスラッシュに見える

見た目上バックスラッシュか円記号かわからないので、コードを書く時に混乱したり予期せぬエラーが発生する

参考

srad.jp

naruse.hateblo.jp