アプリ版:「スタンプのみでお礼する」機能のリリースについて

makeで文字化けをする。
mingwのmakeを使っています。

makeの設定の問題でしょうか。
環境はWindows7です。

宜しく回答願います。

質問者からの補足コメント

  • うーん・・・

    windows7のvimでも、コマンドプロンプトでも文字化けします。
    xyzzyのemacs系ですが、これでは文字化けは出ません。

    何が何なのか、良く分かりませんが。環境を変えれば文字化けが
    出ないと言う事は、makeその物には原因は無い様です。

    然し、コマンドプロンプトで文字化けが出るのは解せないですが。
    コンパイルは、xyzzyで編集はvimと言うのも有り得ますが。余り
    この方法はやりたくは無いですが。

    助けて下さい。

      補足日時:2017/02/23 12:34
  • 文字化けのイメージです。

    「makeで文字化けする。migwのmak」の補足画像2
      補足日時:2017/02/23 12:43
  • xyzzyでmakeが文字化けを起こさない場合を示します。

    「makeで文字化けする。migwのmak」の補足画像3
      補足日時:2017/02/23 12:57
  • コマンドプロンプトで文字化けをした例です。

    「makeで文字化けする。migwのmak」の補足画像4
      補足日時:2017/02/23 14:05
  • let $LANG="C"の設定でOKになっています。
    有難う御座います。

    「makeで文字化けする。migwのmak」の補足画像5
      補足日時:2017/02/23 18:55

A 回答 (9件)

他の回答者様によれば、make の出力は EUCコードのようなので、



set termencoding=cp932



set termencoding=euc-jp

にしてみてはどうでしょう。
    • good
    • 0
この回答へのお礼

有難う御座います。

結果はNGです。
矢張り、ここはlet $LANG="C"とする所でしょうか。

初めてこのvimでC言語のコンパイルを使う所です。
中々、こう言う所と言うのはマニュアルも探しては
見ましたが探せなくて。苦労しました。

お礼日時:2017/02/23 19:01

set termencoding=cp932





set termencoding=utf-8

にしてみてください。
    • good
    • 0
この回答へのお礼

有難う御座います
set termencoding=utf-8を設定しました。

結果は、NGです。何か偉い所で,詰んでしまった。
どうしたもんか。

お礼日時:2017/02/23 18:33

https://ja.wikipedia.org/wiki/Gettext
makeが各言語で表示されるしくみは、これ。

うろ覚えですが、MinGWでは、jaに対応している make.mo は、 ja_JP.EUC 用しかなかったように思います。
端末がSJISでは文字化けします。
たしか、他のコマンドも .moはEUC用だったはずです。

対策は次の通りです。
○ 日本語表示を止める
 ・LANG=C 等、日本語表示しない設定にする
 ・LANG=ja_JP.SJIS 等、コードも含めて設定する→SJISにすれば、EUCは使われない
 ・locale/ja/LC_MESSAGES/make.mo を削除する
○EUC使用で統一する
 ・chcpコマンドでコマンドプロンプトのコードをEUCに変える(他にどんな影響が出るか不明)
 ・cmd.exeではなく、(MinGW/MSYSの) bashを使う
○ja_JP.SJIS用 make.mo を作る
 ・ locale/ja/LC_MESSAGES/make.mo と差し替える
 ・ locale/ja_JP.SJIS/LC_MESSAGES/make.mo に置く

影響が少ないのは、環境変数LANGを変更することでしょう。
    • good
    • 0
この回答へのお礼

有難う御座います。

コマンドラインから、:let $LANG="ja_JP.SJIS"
と設定しましたが、結果はNG。

再度、別の:let $LANG="C"とした所、正常になりました。
ここで、ja_JP.SJISの設定をしても結果がNGになった
原因は何なのだろうか。

取り敢えずはこれで行けそうですが。
尚、文字化けをしているのはmakeだけでgccは一切の
文字化けは有りません。

お礼日時:2017/02/23 18:46

ご教示頂いた通り gvim の表示・編集用の文字コードは :set enc=utf-8 で UTF-8 に設定されていると思いますが、ご提案させて頂いたのは、ターミナルの文字コードの設定である :set tenc=utf-8 です。

 enc ではなく tenc です。 (tenc = termencoding)

あまり自身がないのですが、tenc はデフォルトで未設定なので、一度設定されることをおススメします。
    • good
    • 0
この回答へのお礼

有難う御座います。

_vimrcには下記の様に設定をしています。
これに付いては、順番と言うのが有るのでしょうか。

これをやっても改善されません。
他にも何か問題は有りそうです。

set termencoding=cp932
set enc=utf-8

お礼日時:2017/02/23 18:16

ふむ, 現状は


GVIM とコマンドプロンプト上では make の出力が日本語EUC になっている
ということか.

環境変数を適切に設定すればいいような気がするけどなぁ.... 原因になりそうな奴は #3 に挙げているから, まずはそいつらを適切にいじってみることを勧める.
    • good
    • 0
この回答へのお礼

有難う御座います。

$LANGと言うのが何か関係をしているのでしょうか。
現在のこの値は、jaとなっています。

これが文字化けに起因をしますか。

お礼日時:2017/02/23 16:21

コマンド・プロンプトで make が文字化けするのは make が出力する文字コードが UTF-8 でコマンド・プロンプトが認識する文字コードは SJIS だからですね。



gvim から make を起動する状況とのことですが、
gvim 自身が識別す文字コードは :set enc などで変更可能ですが、make は gvim から起動されるので gvim 設定した文字コードとは別のものになります。

あまり自身がないのですが、
:set tenc=utf-8
で、改善されないでしょうか。
    • good
    • 0
この回答へのお礼

有難う御座います。

現在の_vimrcの設定で、set enc=utf-8を設定していて
エンコーディングは、utf-8になっています。

gvimでのコマンドプロンプト呼び出しでの文字化けは、
コマンドプロンプトが想定をしているのがcp932で
gvimが出力をしているのがutf-8と言う事で、
多分にこれが文字化けの原因だとは思いますが。

問題なのは、これがgvimのウインドウの中での文字化け
です。何とかならんのでしょうか。

gvimのコマンドラインから、直接に:makeを実行させると
gvimのコマンドラインの出力が文字化けと成る所です。

お礼日時:2017/02/23 16:18

まず手元では試しようがないことを断っておく.



でその 2つのスクリーンショットを見ると, xyzzy の上では make が英語で出力しているのに対し, GVIM上では違う言語 (日本語?) で出力していることがわかる. そこから推測されるのは
出力言語に関係する環境変数の値が異なっている
という可能性だ. 候補はいくつもあるけど LANG, LANGUAGE, LC_ALL あるいは LC_xxx と総称される環境変数のうち 1つあるいは複数の値が異なっていると想定される. もちろん何がどう違うのかはわからんので見つけ方などは自分で調べてくれ. で xyzzy と同じになるように GVIM を設定すれば解決する可能性がある.

次に GVIM の「文字化け」についてだが, これは「GVIM が期待する文字コードと make が出力に使っている文字コードが違っている」ことが理由として想定される. これも環境変数の値の問題だろうと考えられる.

ところで「windows7のvimでも、コマンドプロンプトでも文字化けします」のところで「コマンドプロンプトでも文字化けします」が木になるのだが, これは
単純にコマンドプロンプトから make を実行するときにも文字化けする
ということでいいのかな? もしそうなら (GVIM と同じことだけど) make が出力に使う文字コードとコマンドプロンプトが期待する文字コードが違うことに起因するじゃないかなぁ.
    • good
    • 0
この回答へのお礼

有難う御座います。
先程のコマンドプロンプトからのmakeで文字化けと言うのは、
正確には、今気が付きましたが。gvimから:shでコマンドプロンプト
を呼び出した時のmakeで文字化けをします。

gvim経由で無い単独のコマンドプロンプトでのmakeでは例えcp932
で有ったとしてi文字化けは出ません。

これは、単純にgvimでの呼び出しでgvimが使っているutf-8で
コマンドプロンプトで出力をしようとしての文字化けだと思います。

お礼日時:2017/02/23 16:10

具体的には何がどうなったことを「文字化け」と呼んでいる?

    • good
    • 0
この回答へのお礼

有難う御座います。

その時の画面を投稿しましたので確認願います。

お礼日時:2017/02/23 14:06

(文字化けする状況が書かれていないので、よくわかりませんが)


mingw の makeは GNU make ですが、この make に設定などはありません。
(コマンドライン・オプションでも、文字コードに対するものはないと思います)

基本的に、make そのものは ASCIIコードしか扱えないので、Makefile に日本語などが記述されているとうまく動作しない可能性があります。

また、MSYSのツール類(make含む)は、表示コードをUTF-8を前提にしているので、それに起因して文字化けすることがあります。 (SJIS ↔ UTF-8)

make を実行する環境(minttyやコマンド・プロンプト)によっては表示コードがSJISのことがあります。

文字化けする状況・環境(MSYSだけか、Cygwinを使用しているか、出力結果など)をご提示頂ければ、解決できるかもしれません。
    • good
    • 0
この回答へのお礼

有難う御座います。
Windows7でmakefileは下記です。
01.exe:01.c
gcc -o 01.exe 01.c

01.c makefile共にutf-8で書いています。
gccの出力は正常です。makeの出力のみ文字化けする。

DOSの画面からmakeを実行しても文字化けをする。

お礼日時:2017/02/23 11:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!