

### 実現したいこと

・String型でScannerクラスを使い、日本語を出力したい

・コマンドプロンプトに、「こんにちは〇〇(日本語)さん」と出力したい

[code]

    import java.util.Scanner ;
    
    class HelloNext{
    
    public static void main(String[] args) {
    String x ;
    
    Scanner sc = new Scanner(System.in) ;
    
    System.out.print("名前を入力してください。 > ") ;
    x = sc.nextLine() ;
    
    System.out.println() ;
    System.out.println("こんにちは" + x + "さん。") ;
    
    }
    
    }
    
[/code]

というプログラムを作成しました。  
これをWindows上のWindows PowerShellで実行した所、

[code]

    1)名前を入力してください。 > abc
    
    こんにちはabcさん。
    
    2)名前を入力してください。 > あいうえお
    
    こんにちはさん。
    
    3)名前を入力してください。 > あbう
    
    こんにちはbさん。
    
[/code]

となり、日本語入力した場合、名前として認識されず出力が「こんにちはさん。」と出力が失敗してしまいます。

Ubuntu上の端末では問題なく出力された為、恐らく環境の問題だと思われます。

解決策をご教授して頂ければ幸いです。

どうぞよろしくお願いいたします。

### 補足情報（FW/ツールのバージョンなど）

・JDK : 20.0.1  
・Eclipse で書きました。


CC BY-SA 4.0
2023-04-28T07:30:03.167
94675
2023-04-30T09:53:05.373
2023-04-29T02:26:31.680
58093
58093
question
java windows
javaのScannerクラスでString入力を実装した場合、abcなどの英数字はコマンドプロンプト上で入出力できますが、日本語では入力はできても出力されません。


> 実現したいこと  
>  ・String型でScannerクラスを使い、日本語を出力したい  
>  ・コマンドプロンプトに、「こんにちは〇〇(日本語)さん」と出力したい

標準入力(System.in)の文字コードを以下のとおり明示的に指定すればよいです。

[code]

    //Scanner sc = new Scanner(System.in) ;
    Scanner sc = new Scanner(System.in, "Shift-JIS") ;
    
[/code]

実行するコマンドプロンプトの文字コードはデフォルトのままであることを前提としています。

[code]

    C:\>chcp
    現在のコード ページ: 932
    
[/code]

* * *

Windowsのコマンドプロンプト(cmd)での入力はシフトJISのようです。  
Windowsのシステムロケール）をUTF-8に変更してもよいのですが、影響が大きすぎるので現時点ではJavaのソースコードを変更する方がよいと思います。

* * *

ソースコードを修正せず、システムロケールもシフトＪＩＳのままで、  
Windowsのcmdで日本語を表示させるには実行時にfile.encodingがシフトJISであることを明示する必要があります。明示しないと標準入力(シフトＪＩＳ)が文字化けします。

[code]

    java -Dfile.encoding=Shift_JIS クラス名
    
[/code]

※PowerShellで実行する場合はオプションを二重引用符で囲む必要がありました。

[code]

    java java "-Dfile.encoding=Shift_JIS" クラス名
    
[/code]


CC BY-SA 4.0
2023-04-29T00:26:51.197
94679
2023-04-30T09:53:05.373
2023-04-30T09:53:05.373
35558
35558
94675
answer