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.
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. ** **
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.
(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 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. Vous pouvez voir que la source est la même, mais le code de caractère est différent.
UTF-Compiler 16
javac -encoding UTF-16 HelloWorld.java
UTF-Compiler 8
javac HelloWorld.java
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! (> <)
À 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