Ein Debugging-Prozessprotokoll für chinesische Zeichentrickfiguren in der Startkonsole des Tomcat-Quellcodes

Ein Debugging-Prozessprotokoll für chinesische Zeichentrickfiguren in der Startkonsole des Tomcat-Quellcodes

Finden Sie das Problem

Heute werde ich den Tomcat-Quellcode studieren. Also habe ich den Tomcat-Quellcode von der offiziellen Website heruntergeladen, ihn in IDEA importiert, das Maven-Tool zum Erstellen des Projekts verwendet, das Projekt gestartet und die Konsole hat das Tomcat-Protokoll gedruckt, aber die chinesischen Schriftzeichen waren verstümmelt.

Zuerst vermutete ich, dass es sich um ein Problem mit IDEA handelte, also probierte ich verschiedene Lösungen online aus. Es gibt ungefähr diese Typen:

1. Ändern Sie die Ausführungs-/Debugkonfigurationen und fügen Sie den VM-Optionsparameter hinzu: -Dfile.encoding=utf-8;

2. Ändern Sie die Ausführungs-/Debugkonfigurationen und fügen Sie Umgebungsvariablenparameter hinzu: JAVA_TOOL_OPTIONS:-Dfile.encoding=utf-8 und JAVA_OPTS:-Dfile.encoding=utf-8;

3. Ändern Sie die 3 Kodierungen der IDEA-Konfigurationsdateikodierungen in UTF-8;

4. Ändern Sie die benutzerdefinierten VM-Optionen von IDEA und fügen Sie -Dfile.encoding=utf-8 hinzu;

5. Ändern Sie die Dateien idea.exe.vmoptions und idea64.exe.vmoptions im Bin-Verzeichnis der IDEA-Installation und fügen Sie -Dfile.encoding=utf-8 hinzu;

6. Ändern Sie die Datei encodings.xml im Ordner .idea unter dem Projekt und ändern Sie sie von UTF-8 in UTF-8.

7. Ändern Sie die Konfigurationsdatei logging.properties von Tomcat und ändern Sie UTF-8 darin in GBK.

8. Löschen Sie nach der Änderung den Zielordner und kompilieren Sie neu.

9. Starten Sie IDEA nach der Änderung neu.

Nach dem Ausprobieren aller Methoden konnte das Problem des verstümmelten Konsolenprotokolls nicht gelöst werden, wie in der Abbildung gezeigt:

Nach sorgfältiger Beobachtung stellte ich fest, dass die chinesischen verstümmelten Zeichen wie „Information“ und „Serious“ auf der linken Seite des Protokolls behoben wurden, das Protokoll jedoch immer noch verstümmelte Zeichen enthält.

Ich hatte das Gefühl, dass es sich möglicherweise um ein Problem mit dem Code handelte, und beschloss daher, den Code zu debuggen, beginnend mit der ersten Zeile des Protokolls.

17. Februar 2020 10:10:08.585 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server.æœåŠ¡ Version: Apache Tomcat/@VERSION@

Suchen Sie die log()-Methode der Klasse org.apache.catalina.startup.VersionLoggerListener, setzen Sie Haltepunkte und verfolgen Sie sie Schritt für Schritt

Schließlich wurde festgestellt, dass alle Werte in der Lookup-Map-Sammlung der PropertyResourceBundle-Klasse vorhanden waren und die Daten in der Sammlung verstümmelt waren.

Verwenden Sie daher weiterhin den Debugger, um das Laden der Suche anzuzeigen, und überprüfen Sie den Quellcode, um sicherzustellen, dass die Daten in der Suche-Sammlung aus der Eigenschaftendatei gelesen werden. Überprüfen Sie, ob die Eigenschaftendatei auch UTF-8 kodiert ist. Sehen Sie sich also weiterhin den Quellcode an.

Die von geladene Eigenschaftendatei ist = classLoader.getResourceAsStream(resourceName); in ResourceBundle

Laden Sie dann die Daten über die Konstruktionsmethode PropertyResourceBundle.

Als ich diesen Code ändern wollte, stellte ich fest, dass dies eine Klasse im JDK war und nicht geändert werden konnte. (Später erfuhr ich, dass ResourceBundle zur Internationalisierung verwendet wird).

Später habe ich die Informationen überprüft und festgestellt, dass in Java das Standardformat zum Lesen von Dateien iso8859-1 ist. Wenn wir Chinesisch speichern, ist es normalerweise UTF-8. Das Ergebnis sind also verstümmelte Zeichen.

Es gibt zwei Lösungen:

1. Verwenden Sie das Tool native2ascii.exe unter JDK, um die Eigenschaftendatei in die Unicode-Kodierung zu konvertieren. Nach der Konvertierung wie unten gezeigt:

2. Nachdem Sie den Wert im Code erhalten haben, kodieren und dekodieren Sie ihn manuell neu

        versuchen {

            Wert = neuer String (Wert.getBytes("ISO-8859-1"), "UTF-8");

        }fang(Ausnahme e){

            e.printStackTrace();

        }

Nach dem Testen können beide Methoden das Problem lösen.

Da es in Tomcat zu viele Eigenschaftendateien gibt, habe ich die zweite Methode übernommen und den Tomcat-Quellcode wie folgt geändert:

1) Methode getString(finaler String-Schlüssel, finales Objekt... Argumente) in der Klasse org.apache.tomcat.util.res.StringManager.

2) getMessage(String errCode)-Methode der Klasse org.apache.jasper.compiler.Localizer

An diesem Punkt ist das verstümmelte Problem gelöst

Zusammenfassen

Dies ist das Ende dieses Artikels über einen Debugging-Prozess-Datensatz für chinesische verstümmelte Zeichen in der Startkonsole des Tomcat-Quellcodes. Weitere relevante chinesische verstümmelte Zeichen in der Startkonsole des Tomcat-Quellcodes finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • IntelliJ IDEA 2021 Tomcat 8 Start verstümmelter Code Problemlösungsschritte
  • So verbessern Sie die Startgeschwindigkeit von Idea und beheben Probleme mit verstümmelten Zeichen im Tomcat-Protokoll
  • Lösen Sie das chinesische verstümmelte Problem, wenn Java und Idea Tomcat starten
  • Lösung für die verstümmelte Ausgabe, wenn IDEA das Tomcat-Projekt startet
  • Lösen Sie das Problem verstümmelter Zeichen in der Tomcat-Konsole beim Starten von IDEA
  • So lösen Sie das Problem einer großen Anzahl verstümmelter Zeichen beim Starten von Tomcat

<<:  Verwendung von MySQL-Triggern

>>:  Designreferenz Schönes und originelles Blog-Design

Artikel empfehlen

Konfigurieren von MySQL und Squel Pro auf dem Mac

Als Reaktion auf die Popularität von nodejs haben...

Vorschläge zur Optimierung der Webseiten-Kopfzeile

Logo-Optimierung: 1. Das Logobild sollte so klein...

CSS3 erstellt 3D-Würfel-Ladeeffekte

Kurzbeschreibung Dies ist ein cooler 3D-Würfel-Vo...

So ändern Sie das Root-Passwort in MySQL 5.7

Ab MySQL 5.7 wurden viele Sicherheitsupdates hinz...

Schnelle und sichere Methode zum Umbenennen einer MySQL-Datenbank (3 Arten)

Inhaltsverzeichnis So benennen Sie eine MySQL-Dat...

Ein praktischer Bericht über einen durch den MySQL-Start verursachten Unfall

Inhaltsverzeichnis Hintergrund So ermitteln Sie, ...

Gestaltung von Popup-Fenstern und schwebenden Ebenen im Webdesign

Im Zuge des schrittweisen Übergangs von herkömmli...

Erfahren Sie, wie Sie Docker unter Windows 10 Home Edition installieren.

Als ich die Bücher über Redis und Spring Cloud Al...

Lösung für das Versagen von Docker beim Freigeben von Ports

Heute bin ich auf eine sehr seltsame Situation ge...

Zusammenfassung der Namenskonventionen für HTML und CSS

CSS-Benennungsregeln Header: Header Inhalt: Inhalt...

Flex-Layout erreicht feste Anzahl von Zeilen pro Zeile + adaptives Layout

Dieser Artikel stellt das Flex-Layout vor, um ein...

Detaillierte Erläuterung des Befehls zum Bereinigen des MySQL-Datenbank-Binlogs

Überblick Heute werde ich hauptsächlich erklären,...