😎

エンマークとバックスラッシュについて調べてみた

2021/04/14に公開

概要

PHPなどでプログラミングをする際に「エンマーク」と「バックスラッシュ」の扱いに混乱します。特にXAMPPなどでWindowsとLinuxの双方変換をしながらの開発をする際に、Windowsならエンマーク「¥」、Linuxならバックスラッシュ「/」など、なぜか同じ意味なのに扱っている文字が違って混乱を誘います。
なぜWindowsとLinuxで違うのか? という疑問を自分なりに調べてみました。

エンマークとバックスラッシュの文字コードは同じ?

エンマークとバックスラッシュ、両方ともUTF-8は「U+005c」という同じ文字コードです。
同じ文字コードなのに表示するときにエンマークとバックスラッシュの違いが出ています。

なぜ違う表示になるのか?

コンピュータが画面に文字を表示するときに「フォント」が使われます。
この「フォント」は文字コードに対応した文字(記号)を表示するのですが、「U+005c」の文字コードに対応した文字(記号)が日本語フォントの場合はエンマークとなっており、欧文フォントの場合はバックスラッシュが入っているため表示に差が出ています。
エンマーク(¥)は日本語フォント特有の表示となっているためです。
※日本語のエンマーク「¥」に対応するならドルマーク「$」なのでは・・・と思うところですが、そうするとフォントを変えるたびに円ドル換算もしないといけなくなりますね...

エンマークの由来

明治期に海外が日本と取引する際に円は「en」ではなく「yen」と訳されており、その頭文字「Y」に二重線を入れて¥のマークが使われるようなったという説が一般的だそうです。

日本でエンマークがコンピュータに使われる際に

当時、文字コードの標準化をしていく国際規格のISO/IEC 646という符号化文字集合が制定され、そのうちの12文字は各国で自由に決めてもよい領域であったそうです。
そのため日本の規格「JIS X 0201」でエンマークが割り当てられたが「U+005c」であった。だけど海外のASCII規格は「U+005c」にバックスラッシュが割り当てられていた。

割り当てを解決しようとしたが

Unicodeを制定する際にエンマークを「U+005c」ではなく「U+00A5」に割り当てようとしましたが、制御コードとしてのエンマーク(バックスラッシュ)「U+005c」と 文字としてのエンマーク「U+00A5)」の表示での判別ができなくなってしまう。エンマーク「U+005c」を「U+00A5」に変換しようとしても「制御コードとしてのエンマーク」と「文字としてのエンマーク」の判別が困難であった。などのため、現実的な解決として日本のエンマークはバックスラッシュ 「U+005C」と同等する。という事になったそうです。

まとめ

WindowsとLinuxでの違いではなく、エンマーク(¥)は日本語フォントを使っている時、バックスラッシュは欧文フォントを使っている時に出力されます。
両方とも「U+005c」という同じ文字コードを使っているために起きる現象です。
統一化をされようとしましたが現実的解決に留まっており、エンマークとバックスラッシュはプログラミングでは同じ意味として扱われますが
Excelや会計の場合はエンマークは普通に「円」という意味として使われるので、特に扱いに注意が必要です。

GitHubで編集を提案

Discussion