[JAVA] Die Anwendung absorbiert den Unterschied im Zeichencode

Überblick

Als ich neulich über Zeichencodes nachdachte, hatte ich plötzlich die folgende Frage.

"Die Byte-Zeichenfolge sollte je nach Zeichencode unterschiedlich sein. Wie erkennt der Computer sie?"

Ich hatte diese Frage wegen meiner mangelnden Fähigkeiten, aber diesmal fasste ich zusammen, was ich gelernt hatte.

Fazit

Zusammenfassend lässt sich sagen, dass der Unterschied im Zeichencode des von uns eingegebenen Programms von der Anwendung wie dem Compiler in eine eindeutige Byte-Zeichenfolge konvertiert wird. ** Der Zeichencode des Programms wirkt sich also nicht auf die Hardware wie die CPU aus. Kann man sagen. ** ** **

Meine ursprüngliche Annahme

図.png

Tatsächliche Bewegung

図2.png Aber wenn Sie darüber nachdenken **, wenn sich Ihre Anwendung als "meine ursprüngliche Annahme" verhält, was macht der Compiler dann? ** Es machte mir wieder klar, dass ich nicht lernen konnte.

Ich habe versucht zu experimentieren

⓪ Hypothese

(1) Speichern Sie eine Java-Datei insgesamt zweimal an verschiedenen Orten. Beim Speichern wird jedes mit einem anderen Zeichencode gespeichert. (Dieselbe Quelle kann mit einem anderen Zeichencode gespeichert werden.) (2) Beim Vergleich der Unterschiede in den in (1) erstellten Dateien mit Binärdaten ** sollten die Unterschiede bestätigt werden, da sie mit unterschiedlichen Zeichencodes gespeichert werden ** ③ Konvertieren Sie jede in eine Klassendatei ④ Beim Vergleich der Unterschiede zwischen den einzelnen Klassendateien ** sollten keine Unterschiede bestätigt werden **

① Bereiten Sie dieselbe Quelle vor, die mit unterschiedlichen Zeichencodes gespeichert wurde

Bereiten Sie die folgenden Quellen unter Bezugnahme auf HelloWorld.java vor.

HelloWorld.java


public class HelloWorld {

    public static void main(String[] args) {
        // Prints "Hello, World" to the terminal window.
        System.out.println("Hello, World");
    }

}

Überprüfen Sie nach dem Speichern den Zeichencode jeder Datei. WS000156.JPG WS000157.JPG Sie können sehen, dass die Quelle dieselbe ist, der Zeichencode jedoch unterschiedlich ist.

② Nehmen Sie den Unterschied zwischen ①

WS000159.JPG Sie können sehen, dass es Unterschiede in den Binärdaten gibt. ### ③ Kompilieren Sie jede in eine Klassendatei

UTF-Kompilieren Sie 16


javac -encoding UTF-16 HelloWorld.java

UTF-Kompilieren Sie 8


javac HelloWorld.java

④ Nehmen Sie den Unterschied der Klassendatei

WS000161.JPG Es gibt keinen Unterschied!

Ergebnis

Es stellt sich heraus, dass der Unterschied im Zeichencode der Quelle vom Compiler absorbiert und in eine eindeutige Bytezeichenfolge konvertiert wird.

Das obige Experiment wurde in Java durchgeführt, aber danach scheint es, dass die Klassendatei von JVM in die Maschinensprache konvertiert wird und die CPU sie als Programm ausführt. In diesem Experiment haben wir festgestellt, dass ** der Unterschied im Zeichencode der eingegebenen Eingabe in der Phase der Kompilierung in eine Klassendatei zusammengefasst wird. ** ** **

Referenz: Nun ... ich wusste nicht, dass Java zweimal "kompiliert" wurde! (> <)

Zusammenfassung

Ursprünglich fragte ich mich: "Die Byte-Zeichenfolge sollte je nach Zeichencode unterschiedlich sein, aber wie erkennt die Hardware sie?" Also untersuchte ich, was ich oben geschrieben habe. Diese Frage ist jedoch möglicherweise auch aufgetreten, weil ich die Rolle des Compilers nicht richtig verstanden habe. ** Ich erkannte, wie wichtig es ist, die Grundlagen der Anwendung erneut zu studieren.

Recommended Posts

Die Anwendung absorbiert den Unterschied im Zeichencode
Errate den Zeichencode in Java
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
Wenn Sie Probleme mit dem Zeichencode-Problem in Myanmar (Burmesisch) haben
Ruby: Nokogiri ermittelt automatisch den Zeichencode von HTML, das im Binärmodus gelesen wird
Java-Zeichencode
In Bezug auf den Unterschied zwischen den drei Timeouts in HttpClient von Java
Unterschiede zwischen Klassen und Instanzen in Ruby
Fügen Sie den von Doma generierten Quellcode in die Quell-JAR ein
Berechnen Sie die Differenz zwischen Zahlen in einem Ruby-Array
Hören wir auf, den Spezifikationspfad in den Code in den Kommentaren zu schreiben
PATH geht nicht vorbei ... Die Ursache ist der Zeichencode
Code, der nur die in der Verarbeitung integrierte Kamera anzeigt
Unterschiede im Code bei Verwendung des Längensystems in Java
Was ist der Unterschied zwischen den Verantwortlichkeiten der Domänenschicht und der Anwendungsschicht in der Zwiebelarchitektur [DDD]?
Implementieren Sie CustomView im Code
So legen Sie mit JAXB Zeichencode und Zeilenvorschubcode fest
Erstellen wir eine Taschenrechner-App mit Java ~ Zeigen Sie das Anwendungsfenster an
[Android, Java] Praktische Methode zur Berechnung der Differenz in Tagen
So legen Sie den Zeichencode und den Zeilenvorschubcode in Eclipse fest
Legen Sie die Zeitzone für die JVM Ihrer Azure-Anwendung fest
Geben Sie beim Erstellen mit Maven den Zeichencode der Quelle an