0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaで日本語入力が文字化け!原因と解決方法を徹底解説

Posted at

はじめに

Javaで標準入力を使って日本語を処理しようとしたとき、文字化けが発生することがあります。この問題に悩まされた経験がある方も多いのではないでしょうか?この記事では、文字化けの原因と解決策を、シンプルな「連絡先検索アプリ」を例に解説します。


文字化けの問題とは

問題のコード

次のコードをコマンドプロンプトで実行すると、入力した日本語が正しく表示されません。

import java.util.Scanner;

public class ContactManager {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("名前を入力してください:");
        String name = scanner.nextLine();
        System.out.println("こんにちは、" + name + "さん!");
    }
}

実行例

名前を入力してください:
山田
こんにちは、????さん!

文字化けの原因

エンコーディングの不一致

  • コマンドプロンプト(cmd.exe):
    • デフォルトのエンコーディングは Shift-JIS
  • Javaプログラム:
    • デフォルトのエンコーディングは環境依存(多くの場合 UTF-8)。

エンコーディングが一致しないため、日本語入力が正しく解釈されず、文字化けが発生します。


解決方法

文字化けを解消するには、エンコーディングを明示的に指定して、Javaプログラムとコマンドプロンプトのエンコーディングを一致させる必要があります。

修正版コード

import java.util.Scanner;

public class ContactManager {
    public static void main(String[] args) {
        // Shift-JISエンコーディングを指定
        try (Scanner scanner = new Scanner(System.in, "Shift-JIS")) {
            System.out.println("名前を入力してください:");
            String name = scanner.nextLine().trim();
            System.out.println("こんにちは、" + name + "さん!");
        } catch (Exception e) {
            System.out.println("エラーが発生しました: " + e.getMessage());
        }
    }
}

ポイント

  1. Scanner にエンコーディングを指定
    • new Scanner(System.in, "Shift-JIS") を使用して、標準入力を Shift-JIS エンコーディングで処理します。
  2. trim で余分な空白を削除
    • 入力時に発生する不要な空白を削除して、正確にデータを処理します。

実行手順

1. コードを保存

ファイル名を ContactManager.java として保存します。

2. コードをコンパイル

javac ContactManager.java

3. コマンドプロンプトのコードページを設定

コマンドプロンプトが Shift-JIS を使用するように設定します。

chcp 932

4. プログラムを実行

java ContactManager

動作確認

入力例

名前を入力してください:
山田

出力例

こんにちは、山田さん!

文字化けを防ぐ仕組みの解説

なぜこれで解決するのか?

  1. Scanner のエンコーディングを指定

    • Shift-JIS は、コマンドプロンプトのデフォルトエンコーディングです。これに合わせることで、Javaプログラムが入力された日本語を正しく解釈します。
  2. エンコーディングの統一

    • ScannerShift-JIS を指定することで、プログラム全体のエンコーディングを統一します。

応用例: UTF-8を使用する場合

もし UTF-8 を使用する環境(例: Windows Terminal, PowerShell)で動作させたい場合は、以下のようにコードを修正します。

UTF-8対応コード

import java.util.Scanner;

public class ContactManager {
    public static void main(String[] args) {
        // UTF-8エンコーディングを指定
        try (Scanner scanner = new Scanner(System.in, "UTF-8")) {
            System.out.println("名前を入力してください:");
            String name = scanner.nextLine().trim();
            System.out.println("こんにちは、" + name + "さん!");
        } catch (Exception e) {
            System.out.println("エラーが発生しました: " + e.getMessage());
        }
    }
}

実行手順

  1. コードページをUTF-8に変更:
    chcp 65001
    
  2. プログラムを実行。

まとめ

  1. 文字化けの原因:
    • Javaプログラムと実行環境(コマンドプロンプトなど)のエンコーディングが一致していない。
  2. 解決方法:
    • Scanner にエンコーディングを明示的に指定する。
  3. 応用:
    • Shift-JISUTF-8 を切り替えて、さまざまな環境で動作するように対応可能。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?