問題を見つける今日はTomcatのソースコードを勉強するつもりなので、公式サイトからTomcatのソースコードをダウンロードし、IDEAにインポートし、Mavenツールを使用してプロジェクトをビルドし、プロジェクトを開始したところ、コンソールにTomcatのログが出力されましたが、中国語の文字が文字化けしていました。 最初はIDEAの問題ではないかと疑い、オンラインでさまざまな解決策を試しました。大まかに以下のような種類があります。 1. 実行/デバッグ構成を変更し、VM オプション パラメータを追加します: -Dfile.encoding=utf-8; 2. 実行/デバッグ構成を変更し、環境変数パラメータを追加します: JAVA_TOOL_OPTIONS:-Dfile.encoding=utf-8 および JAVA_OPTS:-Dfile.encoding=utf-8; 3. IDEA 構成ファイルの 3 つのエンコーディングを UTF-8 に変更します。 4. IDEA のカスタム VM オプションを変更し、-Dfile.encoding=utf-8 を追加します。 5. IDEA インストールの bin ディレクトリにある idea.exe.vmoptions ファイルと idea64.exe.vmoptions ファイルを変更し、-Dfile.encoding=utf-8 を追加します。 6. プロジェクトの .idea フォルダーにある encodings.xml ファイルを変更し、UTF-8 ではなく UTF-8 に変更します。 7. tomcat のlogging.properties 構成ファイルを変更し、その中の UTF-8 を GBK に変更します。 8. 変更後、ターゲット フォルダーを削除して再コンパイルします。 9. 変更後、IDEA を再起動します。 すべての方法を試した後、図に示すように、文字化けしたコンソール ログの問題は解決されませんでした。 よく観察してみると、ログの左側にある「Information」や「Serious」などの中国語の文字化けは解消されましたが、ログにはまだ文字化けが残っています。 コードに問題があるのではないかと感じたので、ログの最初の行からコードをデバッグすることにしました。
org.apache.catalina.startup.VersionLoggerListener クラスの log() メソッドを見つけ、ブレークポイントを設定してステップごとに追跡します。 最終的に、PropertyResourceBundle クラスのルックアップ マップ コレクションにすべての値が存在し、コレクション内のデータが文字化けしていることが判明しました。 したがって、引き続きデバッガーを使用してルックアップの読み込みを表示し、ソース コードをチェックして、ルックアップ コレクション内のデータがプロパティ ファイルから読み取られていることを確認します。プロパティ ファイルのエンコーディングも UTF-8 であることを確認します。では、ソースコードの表示を続けます。 ResourceBundle の is = classLoader.getResourceAsStream(resourceName); によってロードされるプロパティ ファイル 次に、PropertyResourceBundle 構築メソッドを通じてデータを読み込みます。 このコードを変更しようとしたとき、これは JDK のクラスであり、変更できないことがわかりました。 (後で、ResourceBundle が国際化に使用されることを知りました)。 後で情報を確認したところ、Java では、ファイルの読み取りのデフォルト形式は iso8859-1 であり、中国語を保存する場合は通常 UTF-8 であることがわかりました。そのため、文字化けが発生します。 解決策は2つあります。1. JDK の native2ascii.exe ツールを使用して、プロパティ ファイルを Unicode エンコーディングに変換します。変換後は以下のようになります。 2. コード内の値を取得したら、手動で再エンコードしてデコードします。 試す { 値 = 新しい文字列(value.getBytes("ISO-8859-1"), "UTF-8"); }例外eをキャッチする{ e.printStackTrace(); } テストの結果、どちらの方法でも問題を解決できることがわかりました。 Tomcat にはプロパティ ファイルが多すぎるため、2 番目の方法を採用し、Tomcat ソース コードを次のように変更しました。 1) org.apache.tomcat.util.res.StringManager クラスの getString(final String key, final Object... args) メソッド。 2) org.apache.jasper.compiler.Localizer クラスの getMessage(String errCode) メソッド この時点で文字化けの問題は解決される 要約するTomcat ソースコード起動コンソールの中国語文字化けのデバッグプロセス記録に関するこの記事はこれで終わりです。Tomcat ソースコード起動コンソールの中国語文字化けに関する関連記事については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
相対的な長さの単位それら説明: 相対的な長さの単位。現在のオブジェクト内のテキストのフォント サイズ...
Mac OS 10.11 に MySQL をインストールして設定する方法を、主に写真を使って手順を簡...
目次1. 需要方法1方法2方法3 2. 実装3. 問題解決質問1: トークンの複数回の更新を防ぐ方法...
目次1. はじめに2. vue-cli の紹介2.1 コマンドライン2.2 CLI サービス2.3 ...
序文コードを書く過程で、必然的にコードに何らかの変更を加えることになります。しかし、変更を加えるとき...
この記事では、参考までに、csv中国語データをNavicat for SQLiteにインポートする具...
この記事では、MySQL 8.0.16 Win10 zip版のインストールと設定のグラフィックチュー...
トイ・ストーリー3 オンラインマーケティングウェブサイトゼンモバイル鉄から鉄へスプラウトファンドバー...
成果を達成する実装コードhtml <input type="radio" ...
1. スロークエリの用途は何ですか? long_query_time を超えて実行されるすべての S...
以下のように表示されます。 bb_sbからa1、a2、a1+a2 a、a1*a2 b、a1*1.0/...
UI カットのプロセスでは、ページはヘッダー、コンテンツ、フッターの 3 つの部分で構成されることが...
長い移植と情報検索の期間を経て、組み込みDockerの問題を解決することができました。インターネット...
最近プロジェクトが中断され、RageFrame の研究は一時的に終了しました。この記事では、シングル...
イメージをプルし、コンテナを作成してコンテナを実行するだけです。 docker run -d --r...