• ベストアンサー

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

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

  • Python
  • 回答数3
  • ありがとう数5

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

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

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

kitaf711
質問者

お礼

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

その他の回答 (2)

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

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

kitaf711
質問者

お礼

ありがとうございます。

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

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

kitaf711
質問者

お礼

ありがとうございます。

関連するQ&A

  • エスケープ シーケンスが働かない

    MS-Dos用の古いプログラムですが、Windows-XPのDOS窓(と呼ぶのかな?)で実行すると、そのままエスケープシーケンス文字列が表示されてしまい、位置決めなどをしません。何かいい方法があれば、教えてください。

  • PHPのエスケープシーケンスに関して

    PHPで文字列内で(※だぶるクオーテーションおよびシングルクオーテーション)使用するエスケープシーケンスについて、質問です。 PHPでは例えば \(※バックスラッシュ)を文字列内に含めるときバックスラッシュを二つ続けて入力して print "\\"; 上記の用に記述することになると思いいます。 ただ、上記とは違い  print "  \ "; と上記のようにバックスラッシュの前後にスペースをおいて print することでバックスラッシュをエスケープせずに出力させることができます。 本当はものすごく基本的な動作だと思うのですが、 ちょとこの動きが理解できません。 オライリー本をみてもバックスラッシュはエスケープしないといけないと 記載があります。 よろしくご教授ください。

    • ベストアンサー
    • PHP
  • C言語 エスケープ文字 エスケープシーケンス?

    プログラミング初心者です。 早速ですが現在、C言語入門書に目を通している最中なのですが理解出来ない部分が有ります。 内容としましては 「エスケープ文字」 に関してです。本書ではあまり理解出来なかったのでネットで検索していると、「エスケープシーケンス」 と言う用語も数多く出てきました。 いろいろ検索し私なりに出した答えは..... •エスケープ文字 = 文字が持つ特別な意味を無効にする為の文字。 •エスケープシーケンス = 改行などの特殊な文字を英数字の組み合わせで表現した物。 と....上記の様に私は理解しているのですが現在読んでいるC言語入門書の内容だとエスケープ シーケンスと考えられる説明が 「エスケープ文字」 として記述されています。 それはC言語ならではの扱い方なのか?、本書の内容が間違っているのか? 分かりづらい説明だと思うのですがよろしくお願いいたします。 因に現在読んでいる入門書は 「読本C-C言語徹底攻略」 と言う本でかなり昔のになります。 

  • <Perl>URLエンコードみたいに、一括でエスケープシーケンスをしたい

    多くの、顔文字をCGIで表示するプログラムを作っているのですが、エスケープシーケンスだらけになって大変です。 $など出てきたときには、print<<"EOM" EOM でくくってもおかしな動作をしたり、¥¥などと出てきたときもおかしな動作になって困っています。 URLエンコードのように、何か、こう、サクット簡単に、文字を全部エスケープシーケンスに直してくれるbサイトかアプリはないでしょうかね?

    • ベストアンサー
    • Perl
  • PHPのエスケープシーケンスについての質問です。

    PHPのエスケープシーケンスについての質問です。 下記のコードで改行コードを<br>に置換し、結果を画面に出力しました。 $text = "あいうえお\\nかきくけこ\nさしすせそ"; $text = str_replace("\n", "<br>" , $text); echo $text; 実行結果は下記になりました。 あいうえお\\nかきくけこ さしすせそ 私の予想では、\\nが\<br>に置換され、下記になるかと思いました。 あいうえお\ かきくけこ さしすせそ なぜ\\nは\<br>に置換されず、そのままだったのでしょうか?

    • ベストアンサー
    • PHP
  • Eclipseコンソールでのエスケープシーケンス

    EclipseでJavaのプログラムを開発しておりますが、Eclipseのコンソールでエスケープシーケンスを利用した時の振る舞いがSDKのJavaコマンドで直接動作させた時と違うのは何故でしょうか? 例えば以下の"\r"の動作はJavaコマンドの方ですと現在の行に上書きされる形で表示されます。 for( int i = 0; i < 10; ++i ) { System.out.print( "\r" + i ); Thread.sleep( 100 ); } 上記のコードをEclipseのコンソールを利用すると Eclipseのコンソールでは改行されて表示されてしまいます。 Eclipseでの開発が行い易いため、Eclipseのコンソールの動作をきちんと本家に合わせる設定方法等ご存知でしたら教えて下さい。

    • ベストアンサー
    • Java
  • Lomboz2.1.3のエスケープシーケンスエラー

    EclipseでServlet/JSPを学び始めたものです。 以下JSP(一部抜粋)のスクリプトレットの2行目(VALUEに申請承認代入)で 『エスケープ・シーケンスが無効です。(有効なものは \b \t \n\f \r \" \' \\ です)』 というコンパイルエラーが出てしまいました。 <% out.println("<FORM METHOD=POST ACTION=\"./SearchServlet\">"); out.println("<INPUT TYPE=submit VALUE=\"申請承認\"></FORM>"); %> Webで調べましたが、特に参考ページがなく打つ手なしになってしまいました。 Eclipse等の設定で回避できるのしょうか? ご教授ください。 【環境】 WinXP J2SE1.4.2_05 Eclipse2.1.3 Tomcat4.1.24 Lomboz2.1.3

    • ベストアンサー
    • Java
  • MACのターミナルで「C:¥> c:¥xampp¥php¥pear install MDB2」というコマンドを実行できません。

    ターミナルも始めて使うので、やりかたが違うのかもしれませんが。 上記のコマンドをテキストエディットで入力して(「¥」が「\」になってしまって入力できなかったので)ターミナルにコピー・ペーストして、enterを押したら、「¥」が「\302\245」に変わったし、「-bash: C:¥: command not found」と表示されました。 どのように実行させるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 特殊文字のエスケープについて

    今PHPを勉強しています。全くの初心者なので、本を頼りにやっているのですが、エスケープの所がうまく行きません。分かる方がいたら教えて下さい。お願い致します。 <?php //データを受け取る $text1 = @$_POST["text1"]; //特殊文字をエスケープする $text2 = htmlspecialchars($text1); //エスケープ後の値を表示する echo "<p>エスケープ後:".$text2; //「ENT_QUOTES」を指定したとき echo "<p>ENT_QUOTES:".htmlspecialchars($text1, ENT_QUOTES); //「ENT_NOQUOTES」を指定したとき echo "<p>ENT_NOQUOTES:".htmlspecialchars($text1, ENT_NOQUOTES); ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1" value="<?php echo $text2?>"></td> <td><input type="submit" value="送信" name="sub1"></td> </tr> </table> </form> を実行して、<b>"太字"</b>を送信すると「"」の前に「\」が入ってしまいます。本では、<b>"太字"</b>のまま表示されるようなんです。。 文字コードはEUCで保存しています。

    • 締切済み
    • PHP
  • エスケープコマンドの出力ができません

    エスケープコマンドを出力しようと下記のようなコードを実行しました. 本来であれば画面がクリアされるはずなのに,出力は "?[2J" と表示されました(""の内側です). ただし'?'の部分はEnterキーに記されているような矢印記号で,機種依存文字だと思われます. 正しく画面クリアが実行されない原因がわからなくて困っています. どなたかご回答くださいますようお願いします. [環境] ・コンパイラ:Borland C++ 5.5.1 for Win32 ・OS:Win2000 [ソースコード] #include<stdio.h> void main(){ printf("\x1b[2J"); }

専門家に質問してみよう