VSCodeでJavaのプログラムを書いているのですが、標準入力で日本語を入力すると半角スペースに変換されてしまいます。
GitHubのissueなんかも調べてみましたが参考になるものが見つかりませんでした。
日本語を正しく入力するにはどうすればいいでしょうか。ご教授ください。
###試したこと
以下のテストコードを作成して色々試してみました。
Java
1package app; 2 3import java.util.Scanner; 4 5public class Sample { 6 public static void main(String[] args) { 7 Scanner sc = new Scanner(System.in); 8 System.out.print("文字を入力:"); 9 String str = sc.nextLine(); 10 System.out.println(str); 11 } 12}
こんにちは
と入力すると
result
1文字を入力:こんにちは 2(空白)
こんにちは
と表示されるはずのところが空白になってしまいます。
次に、こんにちはhello
と入力してみると
result
1文字を入力:こんにちはhello 2 hello
helloの前に半角スペース5個(日本語の文字数と同じ)が表示され、日本語が半角スペースになっていることが分かりました。
ターミナルのコマンドも載せておきます。
terminal
1PS C:\Users\ユーザー名\Documents\VSCode_Sample\Sample_Java> 2cd 'c:\Users\ユーザー名\Documents\VSCode_Sample\Sample_Java'; 3& 'c:\Users\ユーザー名.vscode\extensions\vscjava.vscode-java-debug-0.26.0\scripts\launcher.bat' 4'C:\Program Files\pleiades\java\11\bin\java.exe' 5'-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:62688' 6'-Dfile.encoding=UTF-8' '-cp' 7'C:\Users\ユーザー名\AppData\Roaming\Code\User\workspaceStorage\070b16fc000831f7cdc3a75aa587efd2\redhat.java\jdt_ws\Sample_Java_776601b8\bin' 8'app.Sample'
他の言語でも試してみました。
- Python
Python
1print("文字を入力:", end="") 2str = input() 3print(str)
result
1文字を入力:こんにちは 2こんにちは
- C
C
1#include <stdio.h> 2 3int main(void) 4{ 5 char str[20]; 6 7 printf("文字を入力:"); 8 fgets(str, sizeof(str), stdin); 9 printf(str); 10}
result
1文字を入力:こんにちは
あれ、空白すら表示されない。。。
言語によって日本語が正しく入力できたりできなかったりしたので拡張機能に問題があるのではないかと考えて以下のissuを調べてみましたがめぼしい情報は見つかりませんでした。
Language Support for Java(TM) by Red Hatのissue
Debugger for Javaのissue
補足情報
VSCodeのバージョン:1.45.1
Windows10
JavaSE11
因みに、C言語はmingw-w64を使っています。
追記1
VSCodeのターミナルとコマンドプロンプトどちらも半角スペースになってしまいます。
integratedTerminalとexternalTerminalのどちらも半角スペースになってしまいます。
VSCodeを日本語化してみましたがダメでした。
追記2
Scannerの初期化部分を
Scanner sc = new Scanner(System.in, "UTF-8");
と変更して実行してみましたが、半角スペースのままでした。
また、WindowsのコマンドプロンプトとVSCodeのパワーシェルでjava -classpath [Sampleクラスのある場所] Sample
として実行した場合は上手く実行することができました。
さらに、この質問VScodeのデバッグ結果の日本語文字化け改善方法についての回答を参考にlaunch.jsonに"encoding": "shift_jis"
を追加して実行しようとしましたが、javaのデバッグコンソールで`chcp 932と打ってターミナルの文字コードをshift_JISに変更してから実行すると強制的にUTF-8に戻ってしまい上手く実行することができませんでした。
追記3
同じような問題がGitHubに挙がっていました。
VSCodeに問題があると思っていたのですが、どうやら端末またはプログラムに問題があるみたいです。
GitHub Encoding problem? #813
自分的には、pythonでは問題なく実行できているのでJavaに問題がある?と思ってます。
試しにWindowsのpowershellで以下の手順で実行したところVSCodeと同じ状況になりました。
Windowsのパワーシェルを開いて
chcp 65001
としてUTF-8に切り替え。
ソースファイルのある場所まで行ってjavac '-encoding' 'UTF-8' 'src\app\Sample.java'
でコンパイル。
そのままjava '-cp' '.\src' '-Dfile.encoding=UTF-8' 'app.Sample'
で実行。
こんにちはhello
と入力したところhelloだけ表示。
コマンドプロンプトでも同じ結果になりました。
また、VSCodeのターミナルの文字コードがUTF-8じゃないと実行に拡張機能の「Debugger for Java」が勝手にUTF-8のターミナルに切り替えてしまうようで、ターミナルの文字コードを変更することも無理そうです。
Stuckoverflow VS Code Java System Output Encoding
回答1件
あなたの回答
tips
プレビュー