Accent et Windows

Portrait de nepta

Par ce que chez windows on fait jamais comme les autres:

pour écrire dans la console windows le bon vieux
 System.out.println(); ne veux pas vous afficher d'accent?
pas de fatalisme anti-micro$oft primaire, leurs console en est capable!

pour cela il faut utiliser  System.console().printf();
rien de plus évident, n'est-ce pas?
maintenant si y'a que moi qui savait pas on pourrait m'expliquer? (même si y'a pas que moi d'ailleurs)

Commentaires

Portrait de furet

Première différence :
Whether a virtual machine has a console is dependent upon the underlying platform and also upon the manner in which the virtual machine is invoked.
Le comportement de la console est dépendant du système, et aussi du terminal qui a invoqué la jvm, donc appeler System.console().println() utilisera l'encodage du système (et même celui du terminal).

Deuxième différence :
If this virtual machine has a console then it is represented by a unique instance of this class which can be obtained by invoking the System.console() method. If no console device is available then an invocation of that method will return null.

System.console() est donc null quand ton application java n'est pas lancée depuis un terminal ; ce qui peut arriver quand tu utilise un jar exécutable.

Troisième différence :
Security note: If an application needs to read a password or other secure data, it should use readPassword() or readPassword(String, Object...) and manually zero the returned character array after processing to minimize the lifetime of sensitive data in memory.
Tu peux donc demander des mots de passe de manière sécurisée avec System.console().

Sinon pour les messages de log en général on préfère utiliser un logger (cf java.util.logging pour un logger basique dans l'API standard).