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

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

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

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Q&A

解決済

1回答

2943閲覧

Java キーボードからの全角入力が文字化けする

tometo

総合スコア1

Java

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

0グッド

1クリップ

投稿2022/10/06 06:06

編集2022/10/07 05:33

前提

Windows 10のJava 19でキーボードから文字列を入力し、画面に出力させるシステムを作っています。
コンパイルでき、プログラムを実行中に半角の文字列は出力できるのですが、全角の文字列は文字化けが発生しました。
テキストエディタ:Sublime Text 3
コマンドプロンプト

実現したいこと

  • 全角の文字列も文字化けせずに出力する

発生している問題・エラーメッセージ

C:\YJSample\03>javac Sample4.java C:\YJSample\03>java Sample4 文字列を入力してください。 ohayou ohayouが入力されました。 C:\YJSample\03>java Sample4 文字列を入力してください。 おはよう ����が入力されました。

該当のソースコード

Java

1import java.io.*; 2 3class Sample4 4{ 5 public static void main(String[] args) throws IOException 6 { 7 System.out.println("文字列を入力してください。"); 8 9 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 10 11 String str = br.readLine(); 12 13 System.out.println(str + "が入力されました。"); 14 } 15}

試したこと

コマンドプロンプトのコードページを65001(UTF-8)にし、テキストエディタの文字コード(UTF-8)と同じくしたのですが、それでも文字化けが発生しました。
またWindows PowerShellでも同様に実行したところ、他の文字列も文字化けが発生しました。

イメージ説明

追加情報

イメージ説明
イメージ説明

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

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

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

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

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

m.ts10806

2022/10/06 06:11

Javaプログラムが書かれたファイル自体の文字コードは何でしょう。
tometo

2022/10/06 06:31

メモ帳にUTF-8と書かれています
y_waiwai

2022/10/06 06:33 編集

コマンドプロンプトのコードページをShiftJISにしたらどうなるでしょう
tometo

2022/10/06 06:43 編集

コマンドプロンプトでは同く全角の文字列だけが文字化けします。
YT0014

2022/10/06 08:48

コマンドプロンプトのフォントは、何を設定されていますか?
tometo

2022/10/06 09:02

M S ゴシックです。
m.ts10806

2022/10/06 10:49

>メモ帳にUTF-8と書かれています 画面キャプチャ提示いただけますか? ただ、プログラミングをメモ帳で行うのはかなりの悪手なので、 諸々含めるときちんとプログラミングに適したツールを使われたほうが良いと思います。 今回のような「本来止まる場所ではない場所で止まる」ことがなくなります。
YT0014

2022/10/06 11:12

>M S ゴシックです。 手元のWindows10にて確認しましたが、M S ゴシックが正常に設定されている場合、カレントパスとして、バックスラッシュ(逆向きの/)ではなく、¥マークが表示されます。 UTF8に設定した状態でのプロパティのフォント設定を再確認することをお勧めします。 また、プログラムを介さず、入力やメモ帳からのコピペなどで、全角文字を表示させた場合、正常に表示されますか?
tometo

2022/10/06 13:15 編集

m.ts10806様へ メモ帳の画面を追加情報に提示しました。また新しく統合開発環境を使用しようと思います。
tometo

2022/10/06 12:10

YT0014様へ プログラムをこちらにコピペするときに\からバックスラッシュに変わってしまいました。 また、メモ帳のソースコードをコピーし、コマンドプロンプトにぺーストしたところ、内部コマンドまたは外部コマンドとして認識されないというエラー文を除き、すべての行で文字化けせず、正常に表示されました。
YT0014

2022/10/06 13:35

失礼、PowerShellの出力画像と混同していました。 PSでの入力以外の文字化けは、フォント設定で改善されるかと思います。
YT0014

2022/10/06 13:36

出力をリダイレクトして、実際の文字コードをご確認いただくのはいかがでしょう?
tometo

2022/10/06 14:46 編集

YT0014様へ リダイレクトの方法が理解できていないのですが、調べた限り 出力を、java Sample4 >Sample4.java のようにリダイレクトすると、 おはよう とキーボードで打ち込んだ文字列だけが画面に出力されました。メモ帳側では、 文字列を入力してください。 0000が入力されました。 と表示され、文字コードはANSIでした。
YT0014

2022/10/07 01:24

説明不足失礼を。リダイレクトは、その方法です。 出力されたファイルを、バイナリビューアなどで、各文字、特に文字化けしている部分が、どんなコードになっているかを、ご確認いただきたい、という提案でした。 「お」があるはずのコードを見て、各文字コード(セット)と見比べば、入力側の文字コード(セット)が推測できます。 参考までに、各文字コード(セット)の文字コード表。 http://ash.jp/code/unitbl21.htm
tometo

2022/10/07 05:33

YT0014様へ 参考の文字コード表をありがとうございます。各文字はSJISだと分かったのですが、追加情報にもある文字化けしている部分、0について文字コード表と見比べても特定できませんでした。
guest

回答1

0

ベストアンサー

Java SE 18から既定の文字セットがUTF-8に変わりました。それに合わせてJDK 18でもそのようになっています。

JDK 18 Release Notes/JEP 400: UTF-8 by Default - Oracle

ですので質問者さんがお使いのJava SE 19もそれを引き継いでいます。これは、実行時の端末、今回のご質問で言うコマンドプロンプトやPowerShell上での入出力に影響します。そのままだと入出力の前提がUTF-8となってしまうので、プログラムの実行時、より正確にはJVMの実行時にコマンドプロンプトやPowerShellの文字エンコーディングに合わせてセットすることで変更してください。具体的にはシステムプロパティfile.encodingMS932に指定します。javaコマンドを実行するときにjava -Dfile.encoding=MS932 クラス名のようにコマンドラインオプションで指定できます。

下図は、Windows 10 コマンドプロンプト上での実行例です。
イメージ説明

投稿2022/10/07 00:57

dodox86

総合スコア9183

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

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

tometo

2022/10/07 05:12

dodox86様へ 上記のように実行した結果、文字化けせず正常に表示されました。実行例まで提示していただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問