ホームページ  >  記事  >  Java  >  Java エラー: Java11 UTF-8 プロパティ ファイル エラー、対処方法と回避方法

Java エラー: Java11 UTF-8 プロパティ ファイル エラー、対処方法と回避方法

WBOY
WBOYオリジナル
2023-06-25 09:26:271584ブラウズ

Java は、Web アプリケーション、モバイル アプリケーション、デスクトップ アプリケーション、その他の分野の開発で広く使用されているクロスプラットフォーム プログラミング言語です。 Java 開発者がコードを記述するとき、多くの場合、プロパティ ファイルを使用して、構成情報、国際化された文字列、その他のデータを保存する必要があります。ただし、Java 11 を使用して開発されたアプリケーションでは、UTF-8 プロパティ ファイル エラーが発生する可能性があります。この記事では、Java11 UTF-8 プロパティ ファイルのエラーを処理および回避する方法について説明します。

1. UTF-8 属性ファイル エラーの症状

Java11 では、属性ファイルの保存に UTF-8 エンコーディングが使用されており、属性ファイルに中国語、日本語、その他の言語以外の言語が含まれている場合、 ASCII 文字の場合、次の例外が発生する可能性があります:

java.nio.charset.MalformedInputException: Input length = 1
at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:185)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392)

この例外メッセージでは問題の根本原因を特定することは困難ですが、分析を通じて次の結論を導き出すことができます:

  • プロパティ ファイルを読み取るとき、Java11 はデフォルトで UTF-8 エンコーディングを使用します。
  • プロパティ ファイルを読み取るプロセスで、Java は UTF-8 エンコード規則に従ってバイトごとにファイルを読み取ります。
  • 非 ASCII 文字を含むバイト シーケンスが読み取られると、Java はそれを Unicode 文字に変換しようとします。
  • 読み取ったバイト シーケンスを UTF-8 エンコード規則に従って Unicode 文字にデコードできない場合は、MalformedInputException 例外がスローされます。

2. UTF-8 プロパティ ファイルのエラーを回避する方法

  1. プロパティ ファイルのエンコーディングを変更する

UTF-8 エンコーディングを使用する場合プロパティ ファイルを保存するには 上記の例外が発生した場合、属性ファイルのエンコードを ISO-8859-1 や GB2312 などのエンコード形式に変更してみることができます。これら 2 つのエンコード形式は Unicode 文字をサポートしていないため、MalformedInputException は発生しません。ただし、エンコード形式を変更すると、非 ASCII 文字が失われたり文字化けしたりする可能性があることに注意してください。

  1. プロパティ ファイルを読み取るコードを変更します。

プロパティ ファイルを読み取るために正しい文字セットを使用するように、プロパティ ファイルを読み取るコードを変更します。 Java11では、Propertiesクラスを使用してプロパティファイルを読み込む場合、デフォルトでISO-8859-1エンコーディングが使用されるため、中国語などの非ASCII文字を読み込むと文字化けが発生する場合があります。次のコードを使用して、プロパティ ファイルを UTF-8 形式で読み取ることができます。

InputStream inputStream = this.getClass().getResourceAsStream("/test.properties");
Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
Properties properties = new Properties();
properties.load(reader);

このメソッドは、プロパティ ファイルのエンコード形式を UTF-8 に設定して、プロパティ ファイルに中国語やその他の非言語が含まれるようにします。 ASCII 文字を正しく読み取ることができます。

3. UTF-8 属性ファイルのエラーに対処する方法

UTF-8 属性ファイルのエラーが発生した場合は、次の手順で解決できます:

  1. プロパティ ファイルに非 ASCII 文字が含まれているかどうかを確認する

任意のテキスト エディタを使用してプロパティ ファイルを開き、ファイルの内容に中国語、日本語、韓国語などの非 ASCII 文字が含まれているかどうかを確認します。 、など。プロパティ ファイルにこれらの文字が含まれていない場合は、コード内に他の問題がないか確認する必要があります。

  1. プロパティ ファイルのエンコード形式を確認する

テキスト エディターを使用してプロパティ ファイルを開き、ファイルのエンコード形式を確認します。 UTF-8 エンコード形式で、ファイルに非 ASCII 文字が含まれている場合、MalformedInputException が発生する可能性があります。

  1. プロパティ ファイルのエンコード形式を変更するか、プロパティ ファイルのコードを読み取る

特定の状況に応じて、プロパティ ファイルのエンコード形式を変更するか、プロパティ ファイルのコードを読み取るかを選択できます。 MalformedInputException 例外を回避または解決するためのプロパティ ファイルのコード。

つまり、Java11 で UTF-8 エンコード形式のプロパティ ファイルを使用する場合は、文字セット エンコードの問題に特別な注意を払う必要があります。エンコード形式とプロパティ ファイルを読み取るためのコードを正しく設定すると、UTF-8 プロパティ ファイルのエラーの問題を効果的に回避できます。

以上がJava エラー: Java11 UTF-8 プロパティ ファイル エラー、対処方法と回避方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。