[JAVA] L'application absorbe la différence de code de caractère

Aperçu

L'autre jour, lorsque je pensais aux codes de caractères, j'ai soudainement eu la question suivante.

"La chaîne d'octets doit être différente selon le code de caractère, comment l'ordinateur le reconnaît-il?"

J'avais cette question à cause de mon manque de capacité, mais cette fois j'ai résumé ce que j'ai appris.

Conclusion

L'essentiel est que la différence dans le code de caractère du programme que nous entrons est convertie en une chaîne d'octets unique par l'application telle que le compilateur, donc ** le code de caractère du programme n'affecte pas le matériel tel que le CPU. Peut être dit. ** **

Mon hypothèse originale

図.png

Mouvement réel

図2.png Mais si vous y réfléchissez **, si votre application se comporte comme "mon hypothèse d'origine", alors vous parlez de ce que fait le compilateur. ** Cela m'a fait réaliser à nouveau mon manque d'étude.

J'ai essayé d'expérimenter

⓪ Hypothèse

(1) Enregistrez un fichier Java à différents endroits deux fois au total. Lors de l'enregistrement, chacun est enregistré avec un code de caractère différent. (La même source peut être enregistrée avec un code de caractère différent) (2) En comparant les différences dans les fichiers créés en (1) avec des données binaires, ** les différences doivent être confirmées car elles sont enregistrées avec des codes de caractères différents ** ③ Convertissez chacun en un fichier de classe ④ En comparant les différences entre chaque fichier de classe, ** aucune différence ne doit être confirmée **

① Préparez la même source enregistrée avec différents codes de caractères

Préparez les sources suivantes en vous référant à HelloWorld.java.

HelloWorld.java


public class HelloWorld {

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

}

Après l'enregistrement, vérifiez le code de caractère de chaque fichier. WS000156.JPG WS000157.JPG Vous pouvez voir que la source est la même, mais le code de caractère est différent.

② Faites la différence entre ①

WS000159.JPG Vous pouvez voir qu'il existe des différences dans les données binaires. ### ③ Compilez chacun dans un fichier de classe

UTF-Compiler 16


javac -encoding UTF-16 HelloWorld.java

UTF-Compiler 8


javac HelloWorld.java

④ Faites la différence du fichier de classe

WS000161.JPG Il n'y a pas de différence!

résultat

Il s'avère que la différence dans le code de caractère de la source est absorbée par le compilateur et convertie en une chaîne d'octets unique.

L'expérience ci-dessus a été réalisée en Java, mais après cela, il semble que le fichier de classe soit converti en langage machine par JVM et que le processeur l'exécute en tant que programme. Ainsi, dans cette expérience, nous avons constaté que ** la différence dans le code de caractère de l'entrée que nous entrons est résumée au stade de la compilation dans un fichier de classe. ** **

référence: Maintenant ... je ne savais pas que Java était "compilé" deux fois! (> <)

Résumé

À l'origine, je me demandais: "La chaîne d'octets devrait être différente selon le code de caractère, mais comment le matériel le reconnaît-il?", J'ai donc examiné ce que j'ai écrit ci-dessus. Cependant, cette question peut également s'être posée parce que je n'ai pas bien compris le rôle du compilateur. ** J'ai réalisé l'importance d'étudier à nouveau les bases de l'application.

Recommended Posts

L'application absorbe la différence de code de caractère
Devinez le code de caractère en Java
Corrigez le code de caractère en Java et lisez à partir de l'URL
Si vous rencontrez des problèmes avec le problème de code de caractère du Myanmar (birman)
Ruby: Nokogiri identifie automatiquement le code de caractère du html lu en mode binaire
Code de caractère Java
Concernant la différence entre les trois Timeouts dans HttpClient de Java
Différences entre les classes et les instances dans Ruby
Inclure le code source généré par Doma dans le JAR source
Calculer la différence entre les nombres dans un tableau Ruby
Arrêtons d'écrire le chemin de spécification dans le code dans les commentaires
PATH ne passe pas ... La cause est le code du caractère
Code qui affiche uniquement la caméra intégrée dans le traitement
Différences de code lors de l'utilisation du système de longueur en Java
Quelle est la différence entre les responsabilités de la couche domaine et de la couche application dans l’architecture onion [DDD]
Implémenter CustomView dans le code
Comment spécifier le code de caractère et le code de saut de ligne avec JAXB
Faisons une application de calcul avec Java ~ Afficher la fenêtre de l'application
[Android, Java] Méthode pratique pour calculer la différence en jours
Comment définir le code de caractère et le code de saut de ligne dans Eclipse
Définir le fuseau horaire de la JVM de votre application Azure
Spécifiez le code de caractère de la source lors de la construction avec Maven