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

Die perfekte Lösung zum Hervorheben von Schlüsselwörtern in HTML

Bei der Arbeit an einem Projekt bin ich kürzlich ...

Gemeinsame MySQL-Indexwirksamkeitsbedingungen und Indexungültigkeitsbedingungen

Inhaltsverzeichnis 1. Bedingungen für das Versage...

Zusammenfassung der allgemeinen MySQL-Benchmark-Befehle

mysql.lap Allgemeine Parameterbeschreibung –auto-...

Was bedeuten CN2, GIA, CIA, BGP und IPLC?

Was ist die CN2-Linie? CN2 steht für China Teleco...

Einige Vorschläge zur Linux-Systemoptimierung (Kerneloptimierung)

Swap deaktivieren Wenn auf dem Server ein Datenba...

Zusammenfassung der wichtigsten Docker-Befehle für Entwickler

Inhaltsverzeichnis Einführung in Docker Installat...

Implementierung des gemeinsamen Grid-Layouts

Keine Lücken auf beiden Seiten, Lücken zwischen j...

CentOS 7-Methode zum Ändern des Gateways und Konfigurieren des IP-Beispiels

Wählen Sie bei der Installation der CentOS7-Versi...

Docker Compose-Übung und Zusammenfassung

Docker Compose kann die Orchestrierung von Docker...

Native JS-Canvas zum Erzielen einer einfachen Schlange

In diesem Artikel wird der spezifische Code von J...

Nginx kompiliert nginx - neues Modul hinzufügen

1. Vorhandene Module anzeigen /usr/local/nginx/sb...