96176


Javaの`keytool`コマンドの挙動がおかしいです。  
Javaの環境変数は設定済で、`javac -version`できちんと表示されています。  
JDKのバージョンは20.0.2です。  
Windows10を使用しています。

[code]

    keytool -genkey -v -keystore testKey.keystore -alias testtomcat -keyalg RSA -validity 180
    
[/code]

上記のコマンドを実行すると質問が表示されます。パスワードや姓名などです。  
そして最後に「～でよろしいですか」という質問に対して日本語で「はい」と答えると、また姓名に関する質問が表示され、ループしてしまいます。

いろいろと同様の現象を調べてみると「よろしいですか」のところで使用している言語で答えるときちんと生成されて解決できたというものが多いのですが、自分の場合は日本語で「はい」と答えているのにかかわらず質問が終わらないです。

どうすれば解決できるでしょうか？


CC BY-SA 4.0
2023-09-09T11:24:05.663
96168
2023-09-10T23:58:32.653
2023-09-10T23:58:32.653
3060
59213
question
java windows
keytoolコマンドに「はい」で応答しても質問が繰り返し表示される


以下のどちらかで正常に完了できると思われます。

  * 「はい」の場合は 「`y`」 （小文字のY）を入力する
  * ユニコード（UTF-8）環境で実行する

理由の推測:

`keytool`には[日本語のメッセージが用意されている](https://github.com/openjdk/jdk/blob/jdk-20%2B0/src/java.base/share/classes/sun/security/tools/keytool/Resources_ja.java#L386)ようで、該当部分は下記のようになっています。

[code]

     {"yes", "\u306F\u3044"},
     {"y", "y"},
    
[/code]

`yes` の翻訳は `\u306F\u3044`
でありこれはユニコードで表現された「はい」という文字列です。ですから、ユニコード環境（UTF-8）では「はい」と入力すれば完了できます。しかし、質問者さんの環境は
Windows ということで、おそらく端末の入出力が Shift JIS 系の何かなのでしょう。それにより、入力されたデータは Shift JIS
系で表現された「はい」で、比較対象は UTF-8 の「はい」ですから不一致になり、最初に戻るのだと思います。一方、省略表現の
「y」の翻訳はそのまま「y」です。ASCIIの範囲内である「y」の文字コードは Shift JIS でも UTF-8
でも同じなので、これはそのまま使えます。


CC BY-SA 4.0
2023-09-10T23:42:09.667
96176
2023-09-10T23:42:09.667
3054
96168
answer