• 締切済み

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

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

みんなの回答

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

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

skmsk1941093
質問者

お礼

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

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

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

skmsk1941093
質問者

お礼

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

  • asciiz
  • ベストアンサー率70% (6636/9403)
回答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% (1619/5654)
回答No.2

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

skmsk1941093
質問者

お礼

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

  • notnot
  • ベストアンサー率47% (4847/10260)
回答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

  • GNUコンパイラとIntelコンパイラの違いについて

    今回fortranとC言語で書かれたWindows用プログラムをLinux用に移植することになりました。GNUのコンパイラを使用し無事コンパイルできたので実行したのですが"Segmentation fault"となりうまく実行できませんでした。そこで試しにIntelのコンパイラを使用しコンパイルしてみたところGNUのときとは違い"Segmentation fault"とは出ず、プログラム内のエラーチェックに引っかかり止ってしまいました。同じソースコードにもかかわらず止まる箇所が異なります。 今まで考えたことがなかったのですがGNUとIntelのコンパイラの違いはなんなのでしょうか?また、この二つ以外にいいコンパイラはあるのでしょうか?

  • WindowsでのGNUを用いたプログラム開発環境

    Windows10で(できれば)パワーシェルを使ってプログラム開発環境を再構築したいと思っていました。プログラム開発環境はそれ自体がなんとなく危ういというのではだめで、hello worldを表示できた、というレベルを超えたものが必要ではないかと思います。実際hello worldはOKなので並列処理に関する初等的なサンプルのソースを実行しようとしたらダメでした。それを具体的にフィックスする方法はなくはないようですが、対症療法的です。Windowsでのプログラム開発はそもナンセンスかもしれませんが。MSYS2でインストールしてパワーシェルで環境変数を付け足してやってみるのもダメでした。パワーシェルでのscoopコマンドによるgccのインストールも具合が悪いです。ウィンドウズでのGNU系のコンパイラを使った開発環境で比較的安定しているものを構築する方法について教えて頂きたいのですが。

  • 海外のオープンソースプログラムを日本語入力可能にするには…?

    こんにちわ。初心者です。 海外のオープンソースプログラムを日本語入力可能にするにはどうしたら良いでしょうか? ちなみにそのプログラムは、チャットプログラムであり、日本語を入力しても文字化けしてしまいます。どうしたら、日本語入力可能な状態のプログラムにすることができるでしょうか? METAの部分を変更すればできるとか、そんなかんじなんですかね?

    • ベストアンサー
    • PHP
  • アセンブリ言語は原始プログラムですか?

    質問(1) アセンブリ言語というのは、 add $S1, $S2 みたいなやつですよね? wikipediaで「ソースコード(ソースプログラム、原始プログラム)」の注釈1,2を読むと、 注1:【機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。】 注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 と書かれてあります。 でも、 他の教材では アセンブリ言語で書かれたプログラム(原始プログラム) と書かれています。 どっちが正しいのでしょうか? 質問(2) 目的プログラム(オブジェクトプログラム)とは、 IT用語辞典によると 【オブジェクトプログラムとは、ソースプログラム(人間が認識できるプログラム言語で高水準言語など?)をコンパイラで機械語に翻訳したプログラムのことである】 とありますが、 ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? どなたかご教授ください。 お願いします。

  • scanf( )で日本語を入力する方法を教えてください。

    こんにちは、現在C言語とC++を勉強中の者です。 コンパイラーは、Borland C++を使っています。 scanf( )では、日本語を入力できないと思っていました。 ところが、「猫でもわかるプログラミング」では日本語を入力できています。 ただ、使用しているコンパイラーがVC++なのです。 日本語入力はコンパイラーによるものなのでしょうか? 調べてもわかりません。 OSは、WINDOWS-ME です。 よろしくお願いします。

  • ソースコードの中から、日本語が使われている行・韓国語が使われている行を抽出したい

    あるアプリケーションのソースコード(言語はC#)があります。 このアプリケーションは元々、日本国内で使うものであるため、文字列(ダブルクォーテーションで囲まれているところ)には日本語(漢字、ひらがな、片仮名など)が使われています。 このアプリケーションの韓国語バージョンのソースコードもあります。基本的に、元の日本語バージョンの文字列の中の日本語を韓国語におきかえたものと思われます。(画面コントロールの位置や形などが違ったり、その他微妙な違いはありますが。) 元の日本語バージョンのソースコードから日本語の使われている文字列の行、韓国語バージョンのソースコードから韓国語が使われている文字列の行を探したいと思います。 ダブルクォーテーションが存在する行は秀丸エディタでgrepで探せますが、当然、日本語バージョンであっても文字列には、日本語が含まれていないもの(アルファベットだけとか)があります。 日本語が使われている行だけをgrep(抽出する・探す)したいのですが、どうすればよいですか。 できれば、秀丸を使いたいのですが、他のエディタなどでもかまいません。 それから、逆に、韓国語に置き換えたソースコードから、韓国語(ハングル)が使われている文字列の行だけを抜き出すにはどうすればよいでしょうか。 文字コードは、日本語バージョンも韓国語バージョンもANSIです。 コメント行は要らないので対象外ですが、そのことは考えなくていいです。(もし抽出されてしまっても、対処します。)

  • ドイツ語のテキストファイルを日本語ソフトで使用したい

    WindowsXP(SP2)にて、ドイツ語の文字処理を含むソースファイルを日本語版コンパイラで処理したいのですが、うまくいきません。 具体的には、DELPHI6(personal, 日本語版)を用いて、ドイツ語を含むソースファイルをコンパイルしようとしたところ、 「不正な文字が入力ファイルにあります」 と言うエラーがウムラウトの付いている文字処理の箇所でエラーとなります。そもそも日本語版コンパイラでは外国語をうまく扱うことは出来ないのでしょうか? 駄目元で、マイクロソフトのMicrosoft AppLocale Utilityをインストールして見ましたが、だめでした。これを経由してドイツ語を指定してDELPHIを起動しても、日本語のままで起動するため、だめでした。

  • C言語でのプログラムの作り方

    はじめまして。C言語初心者の中学一年生です。 C言語でプログラムを作ろうと思ったのですが、やり方がわかりません。 ”hello”と表示するプログラムの作り方を教えてください。 使用しているコンパイラは"Visual C++ 2010"です。パソコンはWindows xpです。 中学生でも分かるように教えてください。 エディエタ、やソースプログラムなどの用語についても教えてくださると嬉しいです。

  • プログラムのソースコード記述のテキストについて

    例えばC言語のプログラムソースコードをCPad等のエディタに記述する際、エディタに書きこまれるアルファベット等のテキストにはやはりフォントという情報が付いており、これを実行する際にはプレーンテキストにするため、コンパイラが余分なフォントの情報を取り去ってくれるのでしょうか?

  • プログラム言語って何があるの?

    私、プログラム言語について調べています。 ウィキペディアをみてもたくさんあって、そこからまたリンクがたくさんあってどこでどのように区切っていいのか分かりません。そこで皆さんに質問したいのですが、プログラム言語はどのようなものがありますか? 大まかにプログラム言語の総称があってその次に (1)機械語(マシン語) (2)アセンブラ言語 高水準言語これの中に (3)インタプリタ言語 (4)コンパイラ言語がありますが、 (1)~(4)のそれぞれの詳細を教えてください。例:BASIC、C等 またこの枠に入らないプログラム言語がありましたら教えてください。 とってもマイナーなものでも構いません。出来ればURL欲しいです。 お願いします。m(_ _)m

専門家に質問してみよう