• 締切済み

ソースプログラムでの日本語使用について

Windows10のパワーシェルでソースプログラムをコンパイルしていますが、そのソースプログラムの出力部で日本語を用いると文字化けてしまいます。出力部とは、C言語だったらprintf, Fortranだったらwrite文です。ここで文字化けを解消するにはどうしたらいいのでしょうか。 パワーシェルは日本語ファイル、フォルダに対応しており、ファイル名が日本語でも問題ないようです。また、ソース内のコメントは日本語でもOKです。ただ、ソースプログラムを実行するとその結果の出力が文字化けてしまうのですが。コンパイラオプションでしょうか。 Rubyはコメントでさえも日本語がUTF8でないとダメとか、いろいろ事情がありそうです。 あるC言語の解説本は冒頭部から思いっきり日本語出力となっており、それが対応できないのです。 使用しているコンパイラはGNU系のもので、gccなどです。よろしくお願いします。

みんなの回答

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

> 確認なのですが、どのような環境であってもコンパイラオプション、環境変数、エディタの設定で都合よく設定できるという理解でしょうか。 Rubyであれば、文字列自身が自分のエンコーディングを知っていますし、ファイルを読み書きする際にエンコーディングを自動的に変換することも出来ます。 が、Cにはそんな機能は無いので、そういう機能が必要なら自分で作り込む必要があります。なので、どんなニーズにもコンパイラオプションだけで対応するのは無理です。 UTF-8でもShift_JISでもいいのですが、ソースファイル、データファイル、端末などすべて統一しておかないと、駄目でしょう。 統一した場合、何に統一したのかをコンパイルオプションで指定します(gccの場合)。 混在する場合は、変換するコードを自分で書かないと。

skmsk1941093
質問者

お礼

回答ありがとうございます。 この問題はケースバイケースであり、統一的に理解する道筋がない、ということになりそうなのですが。 あの言語、あのOS、あのエディタというように条件設定ごとに対応方針が異なるようで、質問に対する回答でも条件・環境を書かないと答えようがない、という回答を頂くことが多いです。そのため解決したとしてもその条件だけのものということになりますね。普遍的な指導原理風のものがないということですね。英語圏の人たちは何を言ってるのか理解できないだろうなあと思います。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

>あと、WSL2です。パワーシェルからwslコマンドで立ち上げて使います。これも日本語での利用は完全ではないです。 wslコマンドで何を立ち上げて使ってるんでしょうか。 何だか雰囲気的に、どの環境でやってるのか把握せずにやってるから「文字化け」と騒いでるだけに思えてきたんですけど・・・

skmsk1941093
質問者

お礼

回答ありがとうございます。 ご指摘の通りだと思います。日本語環境と言ってもいろんな側面があると思います。フォルダ名、ファイル名、ソースコード、ソースコード内で処理する文字ということです。 これらをコントロールするのが一体どこなのか、把握しておりません。ただ、把握していなくても、フォルダ名、ファイル名の日本語対応になっている場合があります。gnu系のコンパイラはフォルダ名、ファイル名の日本語化は対応しています。ソースコードのコメントは実行とひとまず無関係とみるとそれもほぼOKになっています。エディタ環境依存かもですが。私の問題はトータルで仕組みが分かっていないといえそうです。使用環境はWSLであり、使用しているコンパイラはGnu系(gfortran)です。.bashrcの編集などはやっていません。OS,エディタ、コンパイラそれぞれの設定が重層的になっているのでしょうか。従来は日本語は全方面、全く駄目だから全部、半角英数でやってきたのが大方の動向だったと思っています。それがやや緩和されてきたんだろうと思いますが、そのため設定の考え方が複雑化したように見えるということなのですが。

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

ソース内の漢字はUTF8で書き、プログラム内も漢字はUTF8で処理することが一般的になってきたと思いますが、WindowsのコンソールはシフトJIS(=CP932)が基本です。 シフトJISコンソールにUTF8のバイトデータを出力すると、化けるわけです。 なので、コンソール画面に漢字を出す際は、エンコードをCP932指定して変換してやる必要があります。 完全にDOS/Windows用のソフトを作っているのであれば、ソースも扱いもシフトJISにしてしまうのが一番楽なのですが。 シフトJISはシフトJISでダメ文字などもありますし、Unicodeのファイル名をきちんと扱えるのかどうか不安です。 (単なるバイト列として扱えば良いかもしれませんが、ファイル名を加工したりしようとするとちょっと?) デバッグのための出力ならば、画面に出すのではなくログファイルに記録するのが良いかもしれません。 エディタの方で開くときに文字エンコード指定できますので。 次のページなども参照してください。 >Windows:コマンドプロンプト上でgccコンパイルした実行ファイルが文字化けしない方法 | 電脳産物 >https://dianxnao.com/windows%EF%BC%9A%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E4%B8%8A%E3%81%A7gcc%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%81%97%E3%81%9F%E5%AE%9F%E8%A1%8C/

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>使用しているコンパイラはGNU系のもので、gccなどです。よろしくお願いします。 一口に「GNU系」といってもcygwinなのかmingwなのか等々で回答変わりますよ。

skmsk1941093
質問者

お礼

回答ありがとうございます。 基本は、Mingwの方です。strawberry perlというソフトをインストールすると、gcc, gfortran,もちろんperlもインストールできます。https://strawberryperl.com/ ターミナルはパワーシェルです。 あと、WSL2です。パワーシェルからwslコマンドで立ち上げて使います。これも日本語での利用は完全ではないです。 さらに別にVMwareでゲストでubuntuを立ち上げて利用した場合、日本語がトータルで問題なく使えるようです。

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

Shift_JIS (CP932)を使っているのですかね。 gccであれば、コンパイルオプションで -finput-charset=CP932 -fexec-charset=CP932 を指定します。前者がソースコードのエンコーディング、後者が実行時のエンコーディングです。 Rubyは、ソースコードの冒頭にエンコーディングを #encoding: CP932 とか書くことになっています。デフォルトがutf-8です。 エンコーディングの知識があまりないなら、デフォルト外部エンコーディングもCP932にしておいたほうがいいです。具体的には環境変数RUBYOPTに -Eutf-8 が指定されていれば削除しておく。もしくは -ECP932 にしておく。 どちらの言語も、 ・ソースコードがどのエンコーディングで書かれているか ・実行時にどのエンコーディングで入出力するか を別々に指定します。逆に言うと意図的に別のものを指定してもいいです。

skmsk1941093
質問者

お礼

回答ありがとうございます。 確認なのですが、どのような環境であってもコンパイラオプション、環境変数、エディタの設定で都合よく設定できるという理解でしょうか。私がいま操作できるのはエディタの設定だけです。秀丸ではShift-Jis, UTF8などを指定することができます。その他の今日的なエディタでは設定できると思います。 私は文字化けが生じたらあきらめるという迂回戦術ばかりでやってきました。設定の工夫で乗り切れるというところを押さえておきたいのですが。よろしくお願いします。

関連するQ&A