• ベストアンサー

python エスケープシーケンスについて

エスケープシーケンスについて質問があります。 print("\¥", 100)を実行すると実行結果が \¥ 100 となります。円記号をつけたい時は\¥とするという説明がwebでも本でもあります。\をなしでやると¥が表示されます。 ¥を表示したい時は\をつけなくてもよいのでしょうか? テキストエディットとターミナル を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6803/9675)
回答No.3

文字コード 0x5c(16進数で5c) の、フォントによる表示の違いの問題です。 日本語フォントでは、0x5cは、円記号に見えます。 英語(その他外国語)フォントでは、バックスラッシュに見えるのが普通です。 そしてその 0x5c は、エスケープ表現を開始するための文字とされています。 さて、半角円記号を(日本語フォントで)表示したい場合に、"¥"とやってしまうと、¥はエスケープ文字であるため、何も表示されなくなってしまいます。 そこで、"¥¥"と記述すれば、"¥¥"は1つの"¥"を示すエスケープ表現であるので、表示できます。 外国においても、同じ話です。 バックスラッシュ1文字を表示したい場合に、"\"と書いてしまうと、\はエスケープ文字であるため、何も表示されなくなってしまいます。 そこで、"\\"と記述すれば、1つの"\"が表示されます。 ご質問にある、"\¥"というのは、意味がありません。 本来、そのような表記自体ができないはずのものだからです。(両方とも文字コード0x5cだから、フォントにより"\\"か"¥¥"のどちらかにしかならない。) ところがUnicodeでは、同一文字コードなのに地域によって違う文字が表示されるのはやはりマズイということになり、円記号に別のコードが割り当てられました。 バックスラッシュは従来通り U+005C ですが、円記号は U+00A5 となり、半角バックスラッシュと半角円記号は共存できるようになったんです。 ですから、文字コードの違うUnicodeの"¥"は、もはやエスケープ開始文字ではありません。 単独で"¥"が表示できるのですから、バックスラッシュでエスケープする必要はありません。 ---- なお、プログラムソースがシフトJIS等である場合、¥を打つと文字コード0x5cで保存されます。 なのでその時は、半角円記号を表示する場合、"¥¥"と書いてやる必要が出てきます。(ソース表記上の問題) でもそれを日本語以外の環境で実行すると、バックスラッシュが表示されてしまうのですね。(実行環境の問題) なので、自分が円記号を表示したいときは、漢字記号の"¥"を使います。 これならソース表記上の問題もなく、実行環境にも左右されず、円記号が表示されます。

kitaf711
質問者

お礼

ありがとうございます!勉強になりました!

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

> 円記号をつけたい時は\¥とするという説明がwebでも本でもあります。 それは間違いです。 半角バックスラッシュ(\)を使うときには \\ と2つ書きます。 半角バックスラッシュでない円記号の場合はそのままです。 半角バックスラッシュはフォントによっては半角円記号に見えるので注意が必要だと言うことだけです。

kitaf711
質問者

お礼

ありがとうございます。

  • xf86conf
  • ベストアンサー率25% (51/197)
回答No.1

"\¥"って、\の部分は半角のバックスラッシュで、¥は全角でしょう? 半角の\が日本語フォントでは¥のように表示されるだけなので、\の入力で¥を表示させたい場合、\がメタ文字というかエスケープ文字だから、\\と入力することは間違いではない。けれど、\¥ってやると、¥をエスケープする意味がないから、そのままのリテラルが表示されると思う。 そもそも、フォントによって\\が¥のように表示されることは、何ら保証されていないので、全角の¥をそのまま使うのが確実です。 もちろん、外国語のフォントでは¥記号は表示できないので、JPYとか、別の表記法を検討すべきでしょう。 日本の通販サイトとかでも、"\5500"とかって表示をよく見かけますが、みっともないです。

kitaf711
質問者

お礼

ありがとうございます。

関連するQ&A