円記号

¥ は、日本国の日本円(YEN)や中華人民共和国の人民元(YUAN)などを表す通貨記号である。Unicode文字名称は「YEN SIGN」、JIS文字名称は。金額を表す数字に前置する。

この円記号は、コンピュータでの文字コード変換マッピングに厄介な問題を抱えた記号のひとつとして知られ、円記号のその問題は「円記号問題」と呼ばれる。

 由来 

理由は不明だが、明治時代に日本の通貨である日本円が制定された際、「円」は「」ではなく「」と綴られた(詳細は円 (通貨)を参照)。ドルの習慣に合わせて、その頭文字Yに同様の二重線を入れたものが「¥」の由来であるとする説が一般的である。

一方、中国では本来の通貨単位である「圓」を、貨幣を表すにふさわしい・画数が少ない等の理由から、同音異字の「元」に代替した。双方、拼音で「yuán」と綴り、この頭文字に横線を1本または2本加えた記号「¥」を漢字と同じ2バイト文字として用意し、コンピュータ用の文字集合GB 2312に採用した結果、徐々に実社会でも普及した。

 各国の用法 

 日本 
数字の前につけることにより「- 円」という意味になる。

例：¥200（200円）

また、「¥200.-」のように数字の前に円記号、数字の後にピリオドとダッシュを入れて、前や後に数字を書き加えられることを防ぐこともある。これは銭の単位が日常的に用いられていた頃に、例えば「10円50銭」を「¥10.50」といったように表記していた名残である。

日本以外の国では、中国の圓（人民元）と特に区別したい場合は、JP¥またはYEN¥と書くことも行われる。

 中華人民共和国 
数字の前につけることにより「 - 元」という意味になる。

例：¥200（200元）

日本円と特に区別したい場合は、CN¥またはRMB¥（人民幣元、rénmínbì yuán の略）と書くことも行われる。

 コンピュータによる扱い 

 ASCII 
アメリカ合衆国で制定された符号化文字集合のASCIIには、円記号は含まれない。なおASCIIでは下記で述べる5C(16進)番地にバックスラッシュ (、半角の＼) 記号が割り振られている。

ASCIIを拡張し国際規格とした ISO/IEC 646 は128文字分の領域を持つ符号化文字集合だが、このうち5C(16進)番地を含む12文字分は各国で自由に決めてもよい未定義領域である。

 日本語用文字集合への収録 
日本語用の符号化文字集合規格であるJIS X 0201はISO/IEC 646 に準拠し、円記号は5C(16進)番地に割り振られている。バックスラッシュ () 記号は含まれない。

したがって、バックスラッシュ()がディレクトリー(フォルダー)の階層(フォルダーパス、パス (コンピュータ) 、)を示す記号として用いているMS-DOS（および事実上のその後継OSとなったWindows）の日本語版では、ディレクトリー(フォルダー)の階層(フォルダーパス)を示す5C(16進)番地の記号が、バックスラッシュ()ではなく、円記号となっている。

したがって、ASCIIなどで記述された文書を JIS X 0201 によるものと解釈して読むとバックスラッシュ () が円記号 (¥) に文字化けすることとなり、逆もまた同様である。現在広く用いられている日本語用文字コードのShift_JISなどにも JIS X 0201 に基づく部分があり、それらでも同じ現象が発生する。

バックスラッシュは、MS-DOSではディレクトリ名を区切る記号として、C言語なら文字列の中で特殊文字を意味する記号として扱われるなど、ISO/IEC 646 で未定義の文字を、各種オペレーティングシステムやプログラミング言語、その他のソフトウェアで制御コードとして使用するという不適切な仕様が一般化してしまった。

日本語用の文字コードにはバックスラッシュが存在せず、同じ5C(16進)番地に円記号が割り当てられているのであるが、これらのソフトウェアでは5C(16進)番地の文字がエスケープ文字として扱われるようにされていたため、「日本語用文字コードでは円記号が同等のエスケープ文字として解釈される」ことになった。

 西ヨーロッパ言語用文字集合への収録 
西ヨーロッパで使われている符号化文字集合であるISO-8859-1は、5C(16進)はASCIIと同じくバックスラッシュであり、円記号は別の番地A5(16進)に配置されている。したがって、ISO-8859-1の円記号は制御コードとはならない。また、日本語用文字コードで記述された文書をISO-8859-1によるものと解釈して読む場合、やはり、円記号がバックスラッシュに文字化けする。

 Unicodeが持つ問題（円記号問題） 
日本語用文字コードからUnicodeに変換する際に発生する、円記号の扱いについての問題である。

 Unicodeへの統合 
世界の文字コードを単一の体系で包含するためUnicodeという文字コードが生まれた。Unicodeに世界中のあらゆる文字を含ませ、あらゆる言語をUnicodeで表現できるようにすることが目指された。世界の各種文字コードの文字はUnicodeの文字と対応付けられ、それに従って各種文字コードからUnicodeへの変換を可能にするものであったが、円記号の扱いについては問題があった。

前述のとおり、日本語用の文字コードでは円記号が5C(16進)に位置し、制御コードとして扱われる。それに対し、西ヨーロッパ言語用のISO-8859-1は5C(16進)（バックスラッシュ）とは異なる番地のA5(16進)に円記号が配置されており、円記号は制御コードとして扱われない。したがって、これらの文字コードで書かれた文書をUnicodeに変換し、いずれの円記号をもUnicodeの円記号 (U+00A5) にマッピングした場合、変換後の円記号はバックスラッシュ (U+005C) と同等の制御コードと見なすべき「日本版の円記号」なのか、文字の一種でしかない「ヨーロッパ版の円記号」なのか判別できなくなってしまうのである。また、Unicodeの円記号 (U+00A5) を制御コードと見なさないものとすれば、「制御コードとして使われている円記号はU+005C（バックスラッシュ）に」、「そうでないもの（通貨単位などを表すために使われているもの）はU+00A5（円記号）に」変換せねばならないが、この処理は困難である。

 現実的解決 
この問題に対する現実的解決として、日本の円記号をUnicodeのバックスラッシュ (U+005C) に変換する環境が少なくない。

さらに、Microsoft Windows等のマイクロソフト製のOSでは付属の日本語用のフォントの005Cを円記号に表示するようにすることで表面上問題が起きないようにした。また、多くの日本語JISキーボードでは円記号とバックスラッシュのキーが別々に存在しているが、どちらを入力しても005Cが入力されるようになっている。結果、JISからの変換やキーの入力は005Cに統一され、これらのフォントを用いる限り円記号が表示されるようになっている。結果、ディレクトリー(フォルダー)の階層(フォルダーパス)を示す記号は、英語版では、バックスラッシュ（）であるのに対して、日本語版では、円記号として表示される。また、バックスラッシュのグリフを上書きするこの対応はUnicodeの仕様から逸脱したものであり、さらにソフトウェアで用いられるフォントによってパス区切り等の表示が大きく異なってしまうため混乱の原因となり賛否両論を招いた。現在一般販売・配布されている日本語用フォントにはこの仕様に追従したものと、Unicodeの仕様通りバックスラッシュを表示するものが混在している。

一方macOSではこのようなグリフ変換を行ったフォントは搭載しておらず、005Cはバックスラッシュが表示される。JISキーボードではバックスラッシュキーが存在せず、円記号のキーのみが存在し、西ヨーロッパ言語用のISO-8859-1に準拠し00A5が入力される。また外国語キーボードで日本語IMを使用した場合、バックスラッシュキーが円記号キーとして取り扱われ、同様に設定で反転が可能である。iOSもこの仕様に準じており、円記号（00A5）とバックスラッシュ（005C）は別の文字としてきちんと表示され、ソフトウェアキーボードでは双方が容易に入力できる。Androidではメーカーが採用するフォントにより表示環境は異なるが、概ねiOSと同様であり、主要な日本語キーボードでは2つの記号の双方の入力が可能となっている。

よって、Windows環境下で特別な配慮無く作成されたサイトや文書や、JISから変換されたファイル等をMacintoshやスマートフォン等の環境で閲覧すると、通貨記号を意図して入力された円記号がバックスラッシュで表示されるという問題が発生する。またWindowsのディレクトリ区切りが本質的にはバックスラッシュであることを知らない者がMac等で区切りに円記号（00A5）を使用してWindowsパスを記述し、メール等で送信した場合、そのパスをそのままWindowsでコピー＆ペーストしても正常に動作しない問題、日本語Windows環境を想定して記述されたプログラミング教本をMac使用者が参照して記述したプログラムが正常に動作しない問題なども発生しうる。
しかし、Windowsでは依然として上述の仕様は変更されておらず、通販サイト等では全角の円記号を用いるなどの対応がなされている。

 Shift_JISにおける問題 
Shift_JISでは文字の2バイト目が5C(16進)（円記号・バックスラッシュ）と成りうるため、当該箇所が誤って制御文字と認識されてしまい、問題が発生することがある。この問題の詳細については、Shift_JIS#2バイト目が5C等になりうることによる問題を参照すること。

 文字実体参照による出力 
HTMLにおける文字実体参照では、 ¥ で円記号を表示することができる。このときに出力される円記号はU+00A5にマッピングされているものである。