Encodage ISO 8859-1 de faire imprimer des fichiers dans un programme en Java
J'écris un programme qui implémente une structure de fichier, le programme imprime un produit de fichier basé sur la structure. Les noms de produits comprennent les lettres Æ, Ø Å. Ces caractères ne sont pas affichés correctement dans le fichier de sortie. J'utilise
PrintWriter printer = new PrintWriter(new FileOutputStream(new File("products.txt")));
IS0 8859 - 1 ou Windows ANSI (CP 1252) est le jeux de caractères et la mise en œuvre prevoit.
OriginalL'auteur user265767 | 2011-09-08
Vous devez vous connecter pour publier un commentaire.
Il y a deux possibilités:
En supposant que le problème est la première, la cause est que Java a compris que l'encodage par défaut de la plate-forme est quelque chose d'autre que celui que vous souhaitez /vous attendre. Il existe trois façons de résoudre ce problème:
Comprendre pourquoi Java a le got de paramètres régionaux par défaut de codage et de la "mauvaise" et y remédier. Il aura quelque chose à faire avec votre système d'exploitation et les paramètres régionaux ...
Lire cette FAQ pour plus de détails sur la façon dont vous pouvez remplacer les paramètres régionaux par défaut des paramètres à la ligne de commande.
Utiliser un
PrintWriter
constructeur qui spécifie l'encodage explicite afin que votre demande ne repose pas sur le codage par défaut. Par exemple:En réponse à ce commentaire:
Writer
à la place.Ni régulier
Writer
je crois ... à moins que vous spécifiquement construire à le faire. Le comportement normal est de remplacer toute impossibles à mapper codepoint avec un caractère spécifique, si ce n'est pas spécifié dans la documentation javadoc (IIRC).Qui est vrai. Cependant:
Pour le type de fichier que vous écrivez habituellement à l'aide d'un
PrintWriter
ce n'est pas un problème critique.Si c'est un problème critique ET que vous souhaitez toujours utiliser
PrintWriter
, vous pouvez toujours faire appel àcheckError()
(IIRC) pour savoir si il y avait une erreur.Je ne sais pas.
lire la mise à jour de réponse
Ne pas
PrintWriter
s tous ont le bug que vous ne pouvez pas savoir vous avez eu une erreur avec eux? Ils ne lèvera une exception ou même de retour à l'échec si vous essayez de pousser un codepoint à eux qui ne rentre pas dans la désignation de l'encodage. Ont-ils même de vous dire si vous le système de fichiers se remplit; il me semble qu'ils n'en ont pas. Je finis toujours par écrit monOutputStreamWriter
constructeur expliciteCharset.forName("UTF-8").newEncoder()
deuxième argument. C'est un peu fastidieux, c'est pourquoi peut-être il ya une meilleure façon.OriginalL'auteur Stephen C