Javaで文字コード(UTF-8 / Shift_JIS)を変換したい場面は、業務システムやバッチ処理で非常によくあります。
特に以下のようなケースでは、正しい変換方法を知らないと文字化けが発生します。
-
CSV・テキストファイルの入出力
-
他システム(Windows系)とのファイル連携
-
Shift_JIS前提の外部ツール・帳票連携
-
HULFTやFTP転送後の文字化け対応
この記事では、JavaでUTF-8とShift_JISを正しく変換する方法を、実例付きで分かりやすく解説します。
Javaにおける文字コード変換の基本
Javaでは、文字コード変換を行う際に String と byte[] の相互変換を行います。
|
1 |
new String(byte[], 文字コード) |
この2つが基本です。
文字コード名(正式名称)
| 表記 | Javaで指定する名前 |
|---|---|
| UTF-8 | UTF-8 |
| Shift_JIS | Shift_JIS または "SJIS" |
※ Javaでは "Shift_JIS" が最も安全です。
UTF-8 → Shift_JIS に変換する方法
文字列をShift_JISとして扱いたい場合
⚠ 注意
この方法は「表示用変換」には使えますが、
ファイル出力用途では非推奨です。
正しい方法:文字コードを指定してファイル出力する
UTF-8の文字列をShift_JISでファイルに書き込む(推奨)
|
1 2 3 4 5 |
try (Writer writer = new OutputStreamWriter( new FileOutputStream("sample.txt"), "Shift_JIS")) { writer.write("日本語テキスト"); } |
✅ この方法が最も安全で実務向けです。
Shift_JIS → UTF-8 に変換する方法
Shift_JISファイルを読み込み、UTF-8文字列にする
Java内部の String は 常にUTF-16 のため、
正しく読み込めばUTF-8として扱えます。
byte配列を直接変換する例(API連携など)
|
1 2 3 |
byte[] sjisBytes = ...; // Shift_JISのバイト配列 String utf8String = new String(sjisBytes, "Shift_JIS");<code class="whitespace-pre! language-java"> |
よくある文字化けの原因
原因①:読み込みと書き込みの文字コードが違う
→ ほぼ確実に文字化けします。
原因②:OS依存のデフォルト文字コード
|
1 2 |
new FileReader("sample.txt"); // 非推奨<code class="whitespace-pre! language-java"> |
OSのデフォルト(WindowsはSJIS)が使われるため危険です。
✅ 必ず文字コードを明示する
|
1 2 |
new InputStreamReader(new FileInputStream("sample.txt"), "UTF-8");<code class="whitespace-pre! language-java"> |
Java 11以降なら StandardCharsets を使う(推奨)
|
1 2 3 |
import java.nio.charset.StandardCharsets; byte[] bytes = text.getBytes(StandardCharsets.UTF_8); |
Shift_JISは以下で指定します。
|
1 2 |
Charset.forName("Shift_JIS");<code class="whitespace-pre! language-java"> |
UTF-8 / Shift_JIS 変換 まとめ
| 処理内容 | 推奨方法 |
|---|---|
| 文字列変換 | new String(byte[], charset) |
| ファイル出力 | OutputStreamWriter |
| ファイル入力 | InputStreamReader |
| 文字化け防止 | 文字コードを必ず明示 |
実務での結論
-
String変換より「入出力時の文字コード指定」が最重要
-
Java内部のStringは気にしなくてOK
-
外部ファイル・連携点だけ厳密に管理する

