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

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

新規登録して質問してみよう
ただいま回答率
85.35%
標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

7125閲覧

Javaの標準入力で日本語が半角スペースになってしまう

退会済みユーザー

退会済みユーザー

総合スコア0

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

1クリップ

投稿2020/05/24 06:51

編集2020/06/05 16:04

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

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

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

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

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

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

cateye

2020/05/24 07:37

標準入力で全角文字を入力・・・したのは、VSCのターミナルですか? それともコマンドプロンプト?
退会済みユーザー

退会済みユーザー

2020/05/24 07:55

VSCのターミナルです。 integratedTerminalとexternalTerminalのどちらも上手くいきませんでした。
退会済みユーザー

退会済みユーザー

2020/05/24 08:19 編集

externalTerminalがコマンドプロンプトのことなんですかね。 失礼しました。 記事見てみます。
退会済みユーザー

退会済みユーザー

2020/05/24 08:34

記事を参考に日本語化してみましたが上手くいかないですね。
YT0014

2020/05/24 23:24

Scannerを作成する際、文字コードを指定してみてはいかがでしょう?
退会済みユーザー

退会済みユーザー

2020/05/27 13:11

YT0014さん Scannerの初期化部分を Scanner sc = new Scanner(System.in, "UTF-8"); と変更して実行してみましたが、半角スペースのままでした。
退会済みユーザー

退会済みユーザー

2020/05/27 13:11

もしかしたらVSCode内部に問題があるのかもしれません。
YT0014

2020/05/27 13:40

試していただきありがとうございます。 できましたら、逆の、 Scanner sc = new Scanner(System.in, "MS932"); も試してみてください。
退会済みユーザー

退会済みユーザー

2020/05/27 14:03

YT0014さん 色々提案して頂きありがとうございます。 勧めて頂いた記事ですが、urlが間違っているからか「ページが見つかりません。」と表示されてしまいます。 また、MS932を試してみましたが、上手くいきませんでした。 SHIFT-JIS,UTF-16も一緒に試してみましたが、 SHIFT-JISは以前と同じ結果に、UTF-16は入力待ちとなってしまいました。
guest

回答1

0

ベストアンサー

拡張機能 Debugger for Javaのバッチファイルを直接変更して実行時のターミナルの文字コードをUTF-8からShift_JISに変更し、launch.jsonに"encoding": "Shift_JIS"を追加することで日本語入力ができるようになりました。

Javaで全角で入力した文字が表示できない|taratail」のhope_mucciさんの回答を参考にしました。

手順

Javaのプログラムを実行してターミナルに実行コマンドを表示させる。
表示された実行コマンドの中にlauncher.batのパスがあるので、それにカーソルを合わせてCtrl + クリックをしてバッチファイルを開く。
launcher.batの4行目を65001から932に変更。
(実行時に使用されるターミナルの文字コードがShift_JISになる)

Diff

1@echo off 2 3REM Change code page to UTF-8 for better compatibility. 4- @chcp.com 65001 > NUL 5+ @chcp.com 932 > NUL 6REM Execute real command passed by args 7%*

このままでは入力した日本語が文字化けしてしまうのでlaunch.jsonを開いて"encoding": "Shift_JIS"を追加。
(javaコマンドオプションの'-Dfile.encoding=UTF-8'がUTF-8からShift_JISに変更されて文字化けしなくなる)

Diff

1{ 2 "version": "0.2.0", 3 "configurations": [ 4 { 5 "type": "java", 6 "name": "Debug (Launch) - Current File", 7 "request": "launch", 8 "mainClass": "${file}", 9+ "encoding": "Shift_JIS" 10 } 11 ] 12}

設定を保存してプログラムを実行すると日本語入力ができるようになっている。

投稿2020/06/05 15:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問