web-dev-qa-db-fra.com

Java: jeu de caractères par défaut de la plateforme sur différentes plateformes?

Certains codes hérités reposent sur le jeu de caractères par défaut de la plate-forme pour les traductions. Pour les installations Windows et Linux dans le "monde occidental", je sais ce que cela signifie. Mais en pensant aux plates-formes russes ou asiatiques, je ne suis pas sûr de savoir quel est le jeu de caractères par défaut de leur plate-forme (juste UTF-16?).

Par conséquent, je voudrais savoir ce que j'obtiendrais lors de l'exécution de la ligne de code suivante:

System.out.println("Default Charset=" + Charset.defaultCharset());

Edit: Je ne veux pas discuter des problèmes des jeux de caractères et de leur différence avec l'unicode ici. Je veux juste collecter quels systèmes d'exploitation se traduiront par quel jeu de caractères spécifique. Veuillez ne publier que des valeurs concrètes!

24
Robert

C'est un paramètre spécifique à l'utilisateur. Sur de nombreux systèmes Linux modernes, c'est UTF-8. Sur Mac, c'est MacRoman. Aux États-Unis sous Windows, il s'agit souvent du CP1250, en Europe, du CP1252. En Chine, on trouve souvent du chinois simplifié (Big5 ou un GB *).

Mais c'est la valeur par défaut du système, que chaque utilisateur peut modifier à tout moment. Quelle est probablement la solution: définissez l'encodage lorsque vous démarrez votre application à l'aide de la propriété système file.encoding

Voir cette réponse comment faire cela. Je suggère de mettre cela dans un petit script qui démarre votre application, afin que la valeur par défaut de l'utilisateur ne soit pas corrompue.

29
Aaron Digulla

Pour les installations Windows et Linux dans le "monde occidental", je sais ce que cela signifie.

Probablement pas aussi bien que vous le pensez.

Mais en pensant aux plates-formes russes ou asiatiques, je ne suis absolument pas sûr du jeu de caractères par défaut de leur plate-forme.

Habituellement, c'est tout l'encodage utilisé historiquement dans leur pays.

(juste UTF-16?).

Certainement pas. L'utilisation de l'ordinateur s'est largement répandue avant que la norme Unicode n'existe et chaque zone linguistique a développé un ou plusieurs encodages qui pourraient prendre en charge sa langue. Ceux qui avaient besoin de moins de 128 caractères en dehors ASCII développaient généralement un "ASCII étendu", dont beaucoup étaient finalement normalisés en ISO-8859 , tandis que d'autres développaient deux octets des encodages, souvent plusieurs concurrents. Par exemple, au Japon, les e-mails utilisent généralement JIS , mais les pages Web utilisent Shift-JIS , et certaines applications utilisent EUC-JP . L'un de ces éléments peut être rencontré comme codage par défaut de la plate-forme en Java.

Tout cela est un énorme gâchis, c'est exactement pourquoi Unicode a été développé. Mais le gâchis n'a pas encore disparu et nous devons encore y faire face et nous ne devons pas faire d'hypothèses sur le codage d'un groupe d'octets donné à interpréter comme du texte. Il n'y a rien de tel que simple Texte .

8
Michael Borgwardt