9
votes

Comment obtenir la console Charset?

Comment obtenir la console (CMD.exe dans Windows, Shell Linux, ou Sortie de la console Eclipse) Encodage Chart? java.nio.charset.charset.defaultCharSetSet () semble être réservé aux fichiers d'entrée / sortie, pas de console.


1 commentaires

BTW: La bonne façon d'écrire sur la console est via System.Console () (qui connaît le codage), mais cela ne fonctionne pas avec Eclipse car il a une émulation de console manquante.


4 Réponses :


0
votes

Vous voulez probablement demander à votre IDE, en supposant que vous en utilisez un. Si vous n'êtes pas, c'est ce que votre coquille utilise. Si vous utilisez Eclipse, il sera identique à celui de votre "PaysEt de projet", que vous pouvez trouver / changer en cliquant avec le bouton droit de la souris sur votre projet, vos propriétés et votre ressource -> codage de fichier texte


0 commentaires

1
votes

En général: Vous devriez demander à la coquille quel caractères utilisez actuellement pour afficher des caractères.

deviner ne sachant pas: il n'y a pas de moyen standard en Java comme (je suppose), il n'y a pas de norme pour les consoles pour signaler le brict réel. Nous devrons détecter le système d'exploitation réel ou fournisseur de console (Eclipse, ...) et utilisez leurs fonctionnalités spécifiques pour obtenir le nom du charert réel.


1 commentaires

En fait, Java détecte l'encodage de la console pour System.Console () mais il n'y a pas de fonctionnalité exportée pour la récupérer. JMH fait un piratage pour y arriver avec réflexion: HG.OPENJDK.JAVA.NET/CODE-TOOLS/JMH/FILE/0797222E066E/JMH-COR E / ...



4
votes

Il n'y a pas de moyen standardisé d'obtenir ces informations du système. généralement ce sera le codage par défaut de la plate-forme, mais comme vous l'avez remarqué, ce n'est pas nécessairement le cas (ce n'est pas documenté, autant que je sache).

vous pourrait Allez l'itinéraire laid et utilisez la réflexion pour savoir quel coding Java utilise. Le code suivant est entièrement non-portable et n'a été vérifié que pour fonctionner sur une version spécifique de l'openJDK, son expérimentation et non destiné à la production: < Pré> xxx

cette impression utf8 [sic] sur mon système, qui n'est pas surprenant, car j'utilise une locale UTF-8 sur une machine Linux.


3 commentaires

En fait, System.out vous donne l'encodage IO, mais vous pouvez utiliser une approche similaire pour lire "CS" à partir de System.Console (): HG.OPENJDK.JAVA.NET/CODE-TOOLS/JMH / Fichier / 07972222E066E / JMH-COR E / ... Initialisée par le lanceur (pour Windows Il vous donne l'ANSI / UNICODE CS, je pense que pour Linux, il vous donne la briette par défaut, identique à celle de l'IO Charset)


@ Joachim Sauer Cela fonctionne sur Windows 7 Hu, également là où il n'y a pas de moyen correct de configurer la console (en utilisant CHCP). (Par exemple, "Ping" affiche uniquement le texte lisible avec CP852, d'autres commandes telles que "Aide" Travailler avec CP852 et CP1250, "Système de QEVTUTIL.EXE" ne fonctionne que avec CP1250.)


Assez étonnamment, sur la version américaine de Windows 10, ces rapports CP437 . Certaines choses ne changent jamais.



3
votes

Depuis JDK 1.1, vous pouvez construire un sortie de sortie à l'aide du champ System Out et appelez getcoding ().

OutputStreamWriter osw = new OutputStreamWriter(System.out);
System.out.println(osw.getEncoding());


2 commentaires

Si vous ne fournissez pas explicitement de caractères, osw.gecodinging () devrait simplement vous donner la plate-forme par défaut. Voir par exemple: GITUB.COM/DMLLOYD/OPENJDK/BLOB/...


Si je ne me trompe pas, cela viendra efficacement revenir charset.defaultCharset () qui a peut-être été défini via la propriété File.Coding .