質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

30045閲覧

VSCode デバッグで日本語の文字化けを回避する方法

opyon

総合スコア1009

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

3クリップ

投稿2018/10/17 02:57

編集2018/10/17 04:37

#解決方法

"-fexec-charset=CP932", の1行をtasks.jsonへ追記して解決しました。
※但し、コンパイル後はUTF8ではなくSHIFT-JISなので注意。
私の場合はネット問題提出前の動作確認だけの用途なので問題ないのですがその他の用途に使う場合には注意が必要かと思われます。

tasks.json

{ "version": "2.0.0", "tasks": [ { "type": "process", "label": "Debug Build", "command": "gcc", "args": [ "-g", "-O0", "-fexec-charset=CP932", "${fileBasename}", "-o${fileBasenameNoExtension}.exe" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": "$gcc" } ] }

#知りたいこと
VSCodeのデバッグで出力される標準出力?の日本語の文字化けを回避する方法。
環境構築に手間取っておりなかなか勉強が進められずに困っているので気づいた点などご教示ください。

#現状の問題点
VSCodeのデバッグで出力される標準出力?の日本語が文字化けしてしまいます。

イメージ説明

#試してみたこと
VSCode 文字化け で検索して見つけた VSCodeのターミナルでchcp 65001コマンドを実行しましたが結果変わらず。

コマンドプロンプトで直接chcp 65001コマンドを実行後hello.exeを実行すると日本語表示されました。
しかしVSCode上では結果変わらずでした。
イメージ説明

####環境
Windows 10 HOME
VSCode:1.28.1
インストール済の拡張機能
イメージ説明
昨日10/16にインストールしたばかりです。

hello.cpp

C++

1#include<stdio.h> 2 3int main(void){ 4 int i = 1; 5 if (i == 1){ 6 printf("Helloworld\n"); 7 printf("こんにちは\n"); 8 } 9 return 0; 10}

task.json

{ "version": "2.0.0", "tasks": [ { "type": "process", "label": "Debug Build", "command": "gcc", "args": [ "-g", "-O0", "${fileBasename}", "-o${fileBasenameNoExtension}.exe" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": "$gcc" } ] }

launch.json

{ "version": "2.0.0", "configurations": [ { "name": "C/C++: (gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "c:/mingw/bin/gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "Debug Build" } ] }

c_cpp_properties.json

{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}" ], "defines": [ "_DEBUG", "UNICODE" ], "compilerPath": "c:/mingw/bin/gcc.exe", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "gcc-x64", "browse": { "path": [ "${workspaceFolder}" ], "limitSymbolsToIncludedHeaders": true } } ], "version": 4 }
yakitori99👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

launch.jsonの設定項目にはconsoleというのがあり、internalConsole, integratedTerminal, externalTerminal.
があります。

integratedTerminal
Visual Studio Code 15.1の統合シェルをMSYS2のbashにする - Qiita
で紹介しているように、setting.jsonでカスタマイズできます。

つまり、

  1. setting.jsonintegratedTerminalがUTF-8なロケールにするように("terminal.integrated.shellArgs.windows": ["/K", "chcp 65001"]に)
  2. launch.jsonintegratedTerminalを使うように("console": "integratedTerminal")

すれば可能性があるかもしれません。


だめだったら、UTF-8にするのを諦めて、gccのコンパイル時に実行時ロケールをcp932に指定するようにtask.jsonを書き換えましょう。
MinGW gccでSJIS文字を扱う方法 - hakeの日記
なおgccはこの変換機能がありますが、clangにはありませんのでご注意。


そもそも論、Windowsでデバッグするのは辛さしかないのでLinuxでやるのが幸せでしょう。


Visual Stduio Community で100問以上ある問題を保存管理する

問題ごとにdirectry切って、それぞれにCMakeのCMakeLists.txtを書いた上で、親directoryにもCMakeLists.txtを書いて、子directoryをadd_subdirectoryしてしまえばいいんじゃないかなと

投稿2018/10/17 04:05

編集2018/10/17 05:04
yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

opyon

2018/10/17 04:29

>だめだったら、UTF-8にするのを諦めて、gccのコンパイル時に実行時ロケールをcp932に指定するようにtask.jsonを書き換えましょう。 回答ありがとうございます。 "-fexec-charset=CP932", をtask.jsonに追記して日本語表示は可能になりました。 >すれば可能性があるかもしれません。 より上の内容は具体的にどこをどのように変更したらよいかまだ理解出来ないので試せていません。 ネットの問題提出前に動作確認してソースを提出する際には影響なさそうので取り急ぎこれで解決とさせていただきます。 ありごとうございました。
yumetodo

2018/10/17 05:04

>より上の内容は具体的にどこをどのように変更したらよいかまだ理解出来ないので試せていません。 追記しました
opyon

2018/10/17 06:22

追記ありがとうございます。 >1 "terminal.integrated.shellArgs.windows": ["/K", "chcp 65001"] は追記出来ました。 >2 "console": "integratedTerminal" は追記しても緑色の波線になりマウスオーバーすると「Property console is not allowed.」と表示されていて反映されていないようです。 https://i.gyazo.com/ace7fa854abf048d54af9f77c8d0d671.png https://gyazo.com/9cad8adaa25bb81aaf5ee20f55693f59 検索した情報からレジストリを編集してコマンドプロンプト起動時にbatファイルを読み込み毎回chcp 65001を実行させることは出来たのですがVSCodeのデバッグで呼び出すとCP932になっています。 https://qiita.com/yufu/items/86a455f948a3e1c0ef97
opyon

2018/10/17 07:55

>externalConsoleをfalseにするとどうでしょうか? 変わらずですね。 https://i.gyazo.com/885da6695860b7a247f7ec4ec88badc1.png >あとデバッグではなく普通にintegratedTerminalを開くとどうなりますか? integratedTerminalを開くとはどういうことでしょうか? すみません、昨日C始めたばかりで用語すら初耳のものが多く困惑しています。
opyon

2018/10/17 08:01

すみません結果変わらずというのは、 緑色の波線になりマウスオーバーすると「Property console is not allowed.」と表示されていて反映されていないということです。 >externalConsoleをfalse 変更後実行させると出力ウインドウ?が表示されなくなりました。 この設定は生きているようです。
opyon

2018/10/17 08:46

別件ですが、当初code runnerという拡張機能を入れたのですが、この機能で即時コンパイル&実行すると出力タブで日本語表示されています。 ネットでの問題提出は基本的に1ファイル1ソースで限定されていますし、個人的に何かのアプリを開発するわけでもないので、当面はこれでも十分そうです。
opyon

2018/10/18 03:05 編集

>あとデバッグではなく普通にintegratedTerminalを開くとどうなりますか? ターミナルは普通に開きます。(開くかどうかということであれば。) その後試したことですが "console": "integratedTerminal"を追記してもエラーにならない切り分けが出来ました。 "type": "cppdbg", のようにcppdbgになっているとエラーになり、例えばnodeにするとエラーが消えます。 https://gyazo.com/6e1bc370c9e69391947704e163bbd8f5 https://gyazo.com/4ea2e005c86958e3013a55a757b30797 逆にcppdbg以外にするとその他のものが下線波線でエラーとなります。 "type": "cppdbg", と"console": "integratedTerminal"は同時に書けないということかと。
yumetodo

2018/10/18 12:16

あー、デバッグのプラグイン次第だったのか。ありがとうございます。
guest

0

こんにちは。

回答ではないのですが。

VSCodeは新しいツールですので、あまり情報が出回っていません。(そもそも VSCodeはエディタですし。)
Windows上でC/C++を勉強するのであれば、素直に Visual Stduio Community を使ったほうが情報が大量に出回っているので捗りますよ。

投稿2018/10/17 03:09

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

opyon

2018/10/17 03:18 編集

回答ありがとうございます。 Visual Stduio Community 2017もインストールしたのですが1つプロジェクトを作成するとあれこれファイルが出来ます。 ネットの問題を1つ解いて保存管理するとなると煩雑になりそうだなと思いVSCodeが軽くて操作性が楽なので試行錯誤してるところです。 質問とは違った内容になりますが・・・ VSCodeに拘っているわけではないので例えば、 Visual Stduio Community で100問以上ある問題を保存管理する場合何か良い方法はありますか? 提出時にmain()が必須なのにプロジェクト内ではmain()が同居出来ないらしいので管理が面倒かなと思っています。
Chironian

2018/10/17 03:57

1つのソリューションに複数のプロジェクトを登録することができ、プロジェクト毎に1つのmainを設けることができます。ただ、無関係なプロジェクトを1つのソリューションに入れることはあまりしないです。 複数のソリューションに分けることも考えられるでしょう。ソリューション毎にフォルダを分ける必要があります。 他に「開発者コマンドプロンプト」を使えば、コマンドラインでコンパイルできますから、1つのフォルダに多数のmain関数を含むソースを入れることもできます。私はちょっとしたお試し用プログラムはこの方法で1つのフォルダで作業しています。
opyon

2018/10/17 04:02

ありがとうございます。 VSCodeは軽くて便利そうなので解決方法を模索しながら、 Visual Stduio Communityを使った多数のmain()を含む管理方法も並行して試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問