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

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

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

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

1回答

1356閲覧

コマンドプロンプトの文字化けについて

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

1クリップ

投稿2021/06/24 01:16

編集2021/06/24 01:33

前提・実現したいこと

ファイルの読み込み成功(コンパイル成功)して、「java Task02」と入力したところ、以下のような文字化けが発生しました。

文字コードはコンパイルの時に指定しているのに、なぜ文字化けが起こるのでしょうか。
表示できているところとできていない理由がわからず、苦戦中です。

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

C:\Users\snk19\Documents> C:\Users\snk19\Documents>javac -encoding utf-8 Task02.java C:\Users\snk19\Documents>java Task02.java 遉セ蜩。繧ウ繝シ繝会シ?0001豌丞錐?シ?花山花子謾ッ邨ヲ鬘搾シ?31000000 遉セ蜩。繧ウ繝シ繝会シ?0002豌丞錐?シ?中山中子謾ッ邨ヲ鬘搾シ?900000 遉セ蜩。繧ウ繝シ繝会シ?0003豌丞錐?シ?北山北子謾ッ邨ヲ鬘搾シ?600000 遉セ蜩。繧ウ繝シ繝会シ?0004豌丞錐?シ?東山東子謾ッ邨ヲ鬘搾シ?300000 遉セ蜩。繧ウ繝シ繝会シ?0005豌丞錐?シ?南山南子謾ッ邨ヲ鬘搾シ?300000 遉セ蜩。繧ウ繝シ繝会シ?0006豌丞錐?シ?山田太郎謾ッ邨ヲ鬘搾シ?100000 遉セ蜩。繧ウ繝シ繝会シ?0007豌丞錐?シ?西山西雄謾ッ邨ヲ鬘搾シ?100000 遉セ蜩。繧ウ繝シ繝会シ?0008豌丞錐?シ?中野信二謾ッ邨ヲ鬘搾シ?100000 遉セ蜩。繧ウ繝シ繝会シ?0009豌丞錐?シ?神山雄太謾ッ邨ヲ鬘搾シ?250000 C:\Users\snk19\Documents>

該当のソースコード

ソースコード import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class Task02 { public static void main(String[] args) { //File file = new File("C:/pleiades/workspace/Task02/src/emo01.txt"); //File file = new File("C:/Users/snk19/Documents/emp01.txt"); File file = new File("C:/Users/snk19/Documents/emo01.txt"); " try (Scanner scanner = new Scanner(file)) { scanner.useDelimiter(","); //hasNext関数で値があるかを判定 while (scanner.hasNextLine()) { //System.out.println("ああああ"); //String型をint型へ変換 String empCode = scanner.next(); String empName = scanner.next(); String basicPay = scanner.next(); int basic = Integer.parseInt(basicPay); String day = scanner.next(); int days = Integer.parseInt(day); String empSec = scanner.next(); int empStatus = Integer.parseInt(empSec); switch (empStatus) { case 0: int payment00 = basic + 1000000; System.out.print("社員コード:" + empCode); System.out.print("氏名:" + empName); System.out.println("支給額:" + payment00); break; case 1: int payment01 = basic + 500000; System.out.print("社員コード:" + empCode); System.out.print("氏名:" + empName); System.out.println("支給額:" + payment01); break; case 2: int payment02 = basic + 300000; System.out.print("社員コード:" + empCode); System.out.print("氏名:" + empName); System.out.println("支給額:" + payment02); break; case 3: int payment03 = basic + 100000; System.out.print("社員コード:" + empCode); System.out.print("氏名:" + empName); System.out.println("支給額:" + payment03); break; case 4: int payment04 = basic; System.out.print("社員コード:" + empCode); System.out.print("氏名:" + empName); System.out.println("支給額:" + payment04); break; case 5: int payment05 = basic * days; System.out.print("社員コード:" + empCode); System.out.print("氏名:" + empName); System.out.println("支給額:" + payment05); break; } //next関数は前から順番に値を取得 scanner.nextLine(); } } //scanner.nextLine(); catch (FileNotFoundException e) { e.printStackTrace(); } } }

試したこと

コンパイルの際に、文字コードを指定
「chcp 65001」を入力するも、エラー

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

javacを実行するときの文字コードと、コマンドプロンプトで表示するときの文字コードとは全く違うものです。
コマンドプロンプトの文字コードをUTF-8に切り替えましょう。
参考:文字コードの設定(CHCP)
(「コマンドプロンプト 文字コード」で検索したところ一番上に出てきたページです。ご自分で検索されましたか?)

投稿2021/06/24 01:20

hallen0225

総合スコア587

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

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

退会済みユーザー

退会済みユーザー

2021/06/24 01:25

そのサイト、もちろん見ました。でも、実行したら、以下のようになってしまったのです。 Active code page: 65001 C:\Users\snk19\Documents>javac -encoding utf-8 Task02.java C:\Users\snk19\Documents>java Task02 ЈR[hF0001FԎRԎqxzF31000000 ЈR[hF0002FRqxzF900000 ЈR[hF0003FkRkqxzF600000 ЈR[hF0004FRqxzF300000 ЈR[hF0005FRqxzF300000 ЈR[hF0006FRcYxzF100000 ЈR[hF0007FRYxzF100000 ЈR[hF0008FMxzF100000 ЈR[hF0009F_RYxzF250000 C:\Users\snk19\Documents>
退会済みユーザー

退会済みユーザー

2021/06/24 01:25

「chcp 65001」 を入力しました。
hallen0225

2021/06/24 01:31

それでしたら、そのように書かないと回答者には分かりません。 「試したこと」には、コンパイル時に文字コードを指定したとしか書かれていませんので。
退会済みユーザー

退会済みユーザー

2021/06/24 01:33 編集

更新しました
hallen0225

2021/06/24 01:37

質問の「発生している問題・エラーメッセージ」に書かれているのは、コマンドプロンプトの文字コードを何に設定したときの状態ですか?? (私の環境では、UTF-8で作成したファイルをUTF-8でコンパイルしたものを実行する際、コマンドプロンプトの文字コードはCP932で正常に表示できています)
退会済みユーザー

退会済みユーザー

2021/06/24 01:43

質問は、文字コードを指定していないものです。 UTF-8に変換するための文字コードを入力していたのですが、それが間違いだったのでしょうか。CP932と入力してみます。
退会済みユーザー

退会済みユーザー

2021/06/24 01:49

CP932は、外部で認識できないとエラーメッセージがでました。現在のコマンドプロンプトの文字コードを確認したところ、65001と表示されました。
hallen0225

2021/06/24 01:50

コマンドは"chcp 932"です。
退会済みユーザー

退会済みユーザー

2021/06/24 02:03 編集

成功しました。成功したのですが、少し混乱しております。なぜ、UTF-8で作ったファイルを、UTF-8に対応させるために文字コードを変えたコマンドプロンプトに出力できないのかわかりません。どうしてShift_jisのみの対応なのでしょうか。コンパイルの時だって、UTF-8と、わざわざ入力したのに、どうしてページを読み込むコードは、シフトジスなのでしょうか?
hallen0225

2021/06/24 02:06 編集

端的に申し上げると、「コンパイル」と「実行」は別の操作だからです。 コンパイルというのは、ご存じと思いますが、ソースコードをjavaコマンドで実行できる形(バイトコード)に変換することでしたね。 その時に、ソースコードを正しくバイトコードに変換できるように、文字コードを指定する、というのが、コンパイル時の文字コード指定です。 それと、バイトコードをjavaコマンドで実行したときに、コマンドプロンプト上にどの文字コードで文字を表示するかというのは全く別の問題です。 ちなみに、Windowsの場合はこれもCP932が標準です。
hallen0225

2021/06/24 02:15 編集

なお、javaコマンドで実行するときにも(必要があれば)文字コードを指定することができます。 参考:https://www.javadrive.jp/start/encoding/index4.html "chcp 65001"でコマンドプロンプトの文字コードをUTF-8に切り替えてから、"java -Dfile.encoding=UTF-8 Task02"を実行してみてください。 それであれば上手くいくはずです。 (コマンドプロンプトだと、フォントが英字フォントになってしまって文字が表示できないことがあるようですが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問