

当方プログラム初心者です。
文字コードがSJIS以外(EUCなど)のテキストファイルをBufferdInputStreamで読み込み、readline()したものをprintlnすると、この時点でファイル内の文字が文字化けします。
環境はEclipseで、実行時はUTF-8でエンコードされるようになっています。
ファイルはサクラエディタで作成し、保存時に文字コードをEUCやSJISに設定しています(デフォルトではSJISで保存される)。
ファイル内の文字列は「ABCDE123アイウエオ」が入っている前提です。
BufferedReaderにInputStreamReaderをラップし引数に読み込みたい文字コードを指定してもダメ、文字コードの引数にJISAutoDetectを指定してもダメ、Eclipseの実行構成をテキストファイルと同じ文字コードにしてもダメでした。
取り急ぎで本当にすみません。皆様の知恵をお貸しください。。。
No.1ベストアンサー
- 回答日時:
読み取り・書き込みに文字コードを指定しない場合、OSによってみなし文字コードが選択されます。
Windowsなら、MS932、Shift_JISみたいな。
今回はEUCということなので
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "EUC-JP"));
System.out.println(br.readLine());
取り急ぎなら、こんな感じ?
でも、このやり方はJava SE 1.4とか10年もののレガシーなやり方です。
早速のご回答ありがとうございます。
BufferedReaderにはSJISを指定してあります。これにより他の文字コードで書かれたINPUTのファイルが文字化けしている状態です。
説明不足で申し訳ありません。
可能であれば、INPUTのファイルがどのような文字コードで書かれていてもSJISの文字として読み取れるようにしたいのですが、難しいでしょうか?
No.2
- 回答日時:
テキストファイルが
* JIS (ISO-2022-JP)
* SJIS (Windows-31j or MS932)
* EUC (EUC-JP)
だけなら
File file = new File("EUCまたはSJISまたはJISのファイル名");
FileInputStream s = new FileInputStream(file);
InputStreamReader r = new InputStreamReader(s, "JISAutoDetect");
BufferedReader br = new BufferedReader(r);
String firstLine = br.readLine(); // UTF-16 に変換して読み込み
System.out.println(firstLine); // DOS窓なら SJIS に変換して出力
UTF-8 なども有り得るなら、自動判別するライブラリを別途導入するのが一番かと
例:
http://code.google.com/p/juniversalchardet/
ライブラリ導入が面倒なら、Java8 ならば以下で上手くいきました。
ご参考までに
Path path = Paths.get("EUCまたはSJISまたはJISまたはUTF8またはUTF16のファイル名");
String[] cs = { "ISO-2022-JP", "EUC-JP", "UTF-8", "UTF-16", "MS932" };
for (String c : cs) { try {
List<String> lines = Files.readAllLines(path, Charset.forName(c));
System.out.println(lines);
break;
} catch (IOException e) { continue; } }
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- その他(ソフトウェア) powershell で出力したテキストファイルをvim で開くと文字化け 2 2023/01/11 21:39
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
九九を横に表示する。
-
yyyymmddからyyyy/mm/d...
-
JAVAでエラーがでる。
-
テキストファイルから空白行をよむ
-
InputStream.read()でタイムア...
-
[JAVA]エラーが解決できません。
-
eclipseでmysqlからテーブル情...
-
linuxでapache poiが動かない。
-
BufferedReaderでのエラー
-
Windowsでの標準入力の終了の仕方
-
java.lang.NoClassDefFoundErro...
-
Javaでデータに登録する度にID...
-
System.err. printlnとSystem.o...
-
C言語のポインターに関する警告
-
ORA-01858: 数値を指定する箇所...
-
1~100までの数字を表示したい
-
一定のスペースを空けて端を揃...
-
eclipseに記述したjavaファイル...
-
Randomメソッドの確率設定
-
実数からの小数部の取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
テキストファイルから空白行をよむ
-
csv出力について
-
InputStream.read()でタイムア...
-
Java int sum = 0は必要ですか?
-
FileクラスのcanRead/canWrite...
-
Class.forNameでエラーになる
-
BufferedReaderでのエラー
-
equalsの逆
-
Javaでデータに登録する度にID...
-
ProcessBuilderを使用して、対...
-
テキストファイルの任意の文字...
-
Javaの質問です。テキストファ...
-
JAVAでエラーがでる。
-
java連結
-
[JAVA]エラーが解決できません。
-
九九を横に表示する。
-
javaからffmpegの利用
-
Java FileDialog に関して
-
JavamailでGmailのお気に入りフ...
おすすめ情報