Comment puis-je faire de l'éclipse d'imprimer des caractères bizarres dans unicode?
Donc je suis en train de faire mon programme de la sortie d'un fichier texte avec une liste de noms. Certains noms ont des caractères bizarres, comme Åström.
J'ai attrapé ces liste de noms à partir d'une page web qui est codé en "UTF-8", ou, au moins, je suis sûr qu'il le fait car la source de la page, dit
" meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /"
C'est ce que j'ai essayé jusqu'à présent:
public static void write(List<String> list) throws IOException {
Writer out = new OutputStreamWriter(new FileOutputStream("test.txt"), "UTF-8");
try {
for (int i=0;i<list.size();i++) {
try {
byte[] utf8Bytes = list.get(i).getBytes("UTF-8");
out.write(new String(utf8Bytes, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
out.write(System.getProperty("line.separator"));
}
}
finally {
out.close();
}
}
et je suis un peu confus quant à pourquoi ça ne fonctionne pas. La sortie de ce que j'obtiens est "Ã...ström", ce qui est très bizarre.
Quelqu'un peut-il svp me pointer dans la bonne direction? Merci!
Et sur un autre note, est-il un moyen plus facile d'écrire une nouvelle ligne à un fichier de texte en plus de l'maladroit
.écrire(Système d'.getProperty("line.séparateur"));
que j'ai? J'ai vu que en ligne quelque part et que ça fonctionne, mais je me demandais juste si il y avait une manière plus propre.
Aussi, afin de vérifier l'encodage de la page web, essayez de regarder à la détection de l'encodage. Selon le navigateur, il peut être sous le menu "Affichage" ou de la "clé à molette menu -> encodage" dans Chrome.
Je suis de l'ouverture du fichier dans le bloc-notes. Quand j'ai copier et coller le mot dans le bloc-notes les caractères s'afficher correctement, mais lorsque je lance le programme, les trucs drôles.
Et j'ai vérifié l'encodage comme vous l'avez dit, et c'est de l'UTF-8. Je suis en utilisant google Chrome. Ceci est le site web: lien
Je vous conseille d'utiliser Notepad++ pour ouvrir le fichier.
OriginalL'auteur wynnch | 2011-06-04
Vous devez vous connecter pour publier un commentaire.
Définir votre
Eclipse > Preferences > General > Workspace > Text file encoding
de l'UTF-8.Excellent! Si le besoin s'en fait sentir, vous pouvez également définir un codage différent pour chaque projet dans
Project > Properties > Resource
.OriginalL'auteur trashgod
Le contenu est bien en UTF-8 et il semble OK si imprimé sur la console. Ce qui peut être à l'origine du problème est le décodage et l'encodage de la chaîne qui est inutile. Au lieu d'une OutputStreamWriter essayez d'utiliser un java.io.PrintWriter. Il a la println méthodes d'imprimer la chaîne avec le système de séparateur de ligne à la fin. Il ressemblerait à quelque chose comme:
Aussi, lors de l'ouverture du fichier pour le voir essayer à l'aide d'un navigateur. Ils vous permettent de choisir l'encodage après l'ouverture il de sorte que vous pouvez essayer plusieurs encodages rapidement pour voir ce qui est réellement utilisé.
OriginalL'auteur Javier C
Le bloc-notes n'est pas particulièrement riche en fonctionnalités de l'éditeur. Il tente de deviner l'encodage du document, parfois avec des résultats inattendus. "Texte brut" documents ne portent pas de toutes les métadonnées à propos de leur codage qui leur donne certaines limites. Des applications Windows (bloc-notes) s'appuient souvent sur le l'ordre des octets de la marque de (U+FEFF ou
"\uFEFF"
dans les cordes de Java) afin de déterminer si l'encodage est un format Unicode. Qui pourrait l'aider à sortir le bloc-notes; il va être inutile pour la page web de votre problème.De la spécification HTML 4 définit comment encodage de sortie doit être réglé. Vous devez définir la
Content-Type
en-tête HTTP dans plus de la spécification de la méta encodage.Vous ne mentionnez pas ce que vous utilisez dans votre application web. Une servlet doit définir le type de contenu
setContentType("text/html; charset=UTF-8")
; une JSP doit utiliser la directive de page à faire de même. Autre point de vue, les technologies fournira des mécanismes similaires.Ce code permet d'effectuer certaines opérations inutiles; il convertit des données de caractère UTF-16 en UTF-8, puis de nouveau à partir de l'UTF-8, UTF-16, puis écrit les données à un
Writer
(qui va transcoder l'UTF-16 pour de l'UTF-8). Ce code est équivalent:Utiliser un
PrintWriter
pour obtenir retour à la ligne de soutien.Vous pouvez en lire plus à propos de codage de caractères en Java ici, ici et ici.
OriginalL'auteur McDowell