【8/27まで】Udemyの人気コースが今なら1,200円から!!

【Java入門】ファイルのエンコードをSJISとUTF-8で相互変換する方法

【Java入門】ファイルのエンコードをSJISとUTF-8で相互変換する方法

この記事では、UTF-8のファイルをSJISに変換する方法と、SJISのファイルをUTF-8に変換する方法について解説しています。

UTF-8のファイルをSJISに変換する方法

入力ファイルの内容とエンコードは以下のとおりです。
charset=utf-8になっている場合、このファイルがUTF-8であることを示します。

user01@DESKTOP-AQBVPOG MINGW64 /c/workspace/result
$ file -i input_utf8.txt
input_utf8.txt: text/plain; charset=utf-8

user01@DESKTOP-AQBVPOG MINGW64 /c/workspace/result
$ cat input_utf8.txt
apple
りんご
林檎

Javaのコードは以下のとおりです。
UTF-8のファイルである「input_utf8.txt」をSJISに変換し、「out_SJIS.txt」に出力します。

java

// Base64エンコードしたいファイルのパス
String targetFilePath = "C:\\workspace\\result\\input_utf8.txt";

// ファイルの内容をbyteに変換する
byte[] data = Files.readAllBytes(Paths.get(targetFilePath));

// 出力先パス
String outPutSJIS = "C:\\workspace\\result\\out_SJIS.txt";
String outPutUTF8 = "C:\\workspace\\result\\out_UTF8.txt";

// ファイル出力(SJIS)
try(FileOutputStream fos = new FileOutputStream(outPutSJIS);
	BufferedOutputStream bos = new BufferedOutputStream(fos);
	OutputStreamWriter osw = new OutputStreamWriter(bos, "SJIS");){

	osw.write(new String(data, "UTF-8"));
}

// ファイル出力(UTF-8)
try(FileOutputStream fos = new FileOutputStream(outPutUTF8);
	BufferedOutputStream bos = new BufferedOutputStream(fos);
	OutputStreamWriter osw = new OutputStreamWriter(bos, "UTF-8");){

	osw.write(new String(data, "UTF-8"));
}

解説

SJISのファイルを作りたいわけですので、以下のようにOutputStreamWriterにはSJISを指定します。

OutputStreamWriter osw = new OutputStreamWriter(bos, "SJIS");

元ファイルはUTF-8で書かれていますので、書き込み時も以下のようにUTF-8を指定します。

osw.write(new String(data, "UTF-8"));

SJISのファイルをUTF-8に変換する方法

入力ファイルのエンコードは以下のとおりです。
charset=unknown-8bitになっている場合、このファイルがSJISであることを示します。

$ file -i input_sjis.txt
input_sjis.txt: text/plain; charset=unknown-8bit

Javaのコードは以下のとおりです。
SJISのファイルである「input_sjis.txt」をUTF-8に変換し、「out_UTF8.txt」に出力します。

java

// Base64エンコードしたいファイルのパス
String targetFilePath = "C:\\workspace\\result\\input_sjis.txt";

// ファイルの内容をbyteに変換する
byte[] data = Files.readAllBytes(Paths.get(targetFilePath));

// 出力先パス
String outPutSJIS = "C:\\workspace\\result\\out_SJIS.txt";
String outPutUTF8 = "C:\\workspace\\result\\out_UTF8.txt";

// ファイル出力(SJIS)
try(FileOutputStream fos = new FileOutputStream(outPutSJIS);
	BufferedOutputStream bos = new BufferedOutputStream(fos);
	OutputStreamWriter osw = new OutputStreamWriter(bos, "SJIS");){
	osw.write(new String(data, "SJIS"));
}

// ファイル出力(UTF-8)
try(FileOutputStream fos = new FileOutputStream(outPutUTF8);
	BufferedOutputStream bos = new BufferedOutputStream(fos);
	OutputStreamWriter osw = new OutputStreamWriter(bos, "UTF-8");){
	osw.write(new String(data, "SJIS"));
}

解説

UTF-8のファイルを作りたいわけですので、以下のようにOutputStreamWriterにはUTF-8を指定します。

OutputStreamWriter osw = new OutputStreamWriter(bos, "UTF-8");

元ファイルはSJISで書かれていますので、書き込み時も以下のようにSJISを指定します。

osw.write(new String(data, "SJIS"));

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です