[解決済み] Java FileReaderのエンコーディングの問題
質問
java.io.FileReaderを使ってテキストファイルを読み込んで文字列に変換しようとしたのですが、結果が間違ったエンコードで全く読めません。
以下は私の環境です。
-
Windows 2003、OS エンコード。CP1252
-
Java 5.0
私のファイルはUTF-8エンコードまたはCP1252エンコードされており、その一部(UTF-8エンコードされたファイル)には中国語(非ラテン語)文字が含まれている可能性があります。
私は以下のコードを使って作業をしています。
private static String readFileAsString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
FileReader reader = new FileReader(filePath);
//System.out.println(reader.getEncoding());
BufferedReader reader = new BufferedReader(reader);
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
上記のコードではうまくいきません。テキストがUTF-8でエンコードされていても、FileReaderのエンコーディングはCP125であることがわかりました。しかし、java.io.FileReaderのJavaDocにはそのように書かれています。
このクラスのコンストラクタは デフォルトの文字エンコーディング とデフォルトのバイトバッファサイズが適切であると仮定します。 が適切であると仮定します。
FileReaderを使用する場合、自分で文字コードを設定する必要はないということでしょうか。しかし、現在間違ってエンコードされたデータを取得してしまったのですが、どのように対処するのが正しいのでしょうか?ありがとうございます。
どのように解決するのですか?
はい、あなたは エンコーディングを指定する必要があります。 を指定する必要があります。
はい、これはつまり 知る 読み込むファイルのエンコード方式を指定します。
いいえ、一般的な方法はありません。 推察 与えられたプレーンテキストファイルのエンコーディングを指定します。
の1引数コンストラクタです。
FileReader
は、常にプラットフォームのデフォルトエンコーディングを使用します。
悪しき考え
.
Java 11以降
FileReader
は、エンコーディングを受け付けるコンストラクタも追加されました。
new FileReader(file, charset)
と
new FileReader(fileName, charset)
.
それ以前のバージョンのjavaでは
new InputStreamReader(
new FileInputStream(pathToFile)
, <encoding>)
.
関連
-
springboot project MIMEタイプ text/htmlで転送された静的ファイルを読み込む。
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
Spring Boot による HTTPS アクセスの設定
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
アイデア Springboot Web プロジェクトを jar にパッケージ化する場合、Error: 無効または破損した jarfile x.jar 解決策
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
テストが見つかりませんでした
-
[解決済み] Javaでプレーンテキストファイルを読み込む