UTF-8 caractères CJK ne s'affichent pas dans Java
J'ai lu sur Unicode et UTF-8 depuis un moment et je pense que je le comprends, donc j'espère que ce ne sera pas une question stupide:
J'ai un fichier qui contient des caractères CJK, et qui a été enregistré en UTF-8. J'ai plusieurs langues d'Asie packs installés et les personnages sont correctement rendues par d'autres applications, donc je sais que beaucoup de travaux.
Dans mon application Java, j'ai lu le fichier comme suit:
//Create objects
fis = new FileInputStream(new File("xyz.sgf"));
InputStreamReader is = new InputStreamReader(fis, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(is);
//Read and display file contents
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println(sb);
La sortie affiche les caractères CJK '???'. Un appel à is.getEncoding()
confirme que c'est bien en UTF-8. Ce qui me manque pour que les caractères s'affichent correctement? Si cela fait une différence, je suis à la recherche de la sortie en utilisant l'Éclipse de la console.
Eclipse (Helios)
J'ai essayé avec les caractères arabes avant et la j'ai eu le même problème. Mais quand j'ai placé un point de bec et vérifié la chaîne, j'ai vu la chaîne affichée correctement. Je l'ai imprimée dans un fichier et c'était OK.
Merci pour la confirmation. D'autres tests ont confirmé que c'est juste ma Eclipse config que c'est la question.
OriginalL'auteur Twicetimes | 2011-05-11
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est la ligne ci-dessus. Cela permettra d'encoder les caractères de données à l'aide de la valeur par défaut du système de codage et d'émettre les données sur la sortie standard STDOUT. Sur de nombreux systèmes, c'est un procédé qui engendre des pertes.
Si vous modifiez les paramètres par défaut, l'encodage utilisé par
System.out
et l'encodage utilisé par la console doit correspondre.Le seul mécanisme de prise en charge pour changer le système par défaut l'encodage via le système d'exploitation. (Certains conseillent d'utiliser le
file.encoding
de la propriété du système, mais c'est pas pris en charge et peut avoir des effets secondaires imprévus.) Vous pouvez utiliser sera à votre proprePrintStream
:Vous pouvez modifier l'Éclipse de la console d'encodage via le Configuration d'exécution.
Vous pouvez trouver un certain nombre de posts sur le sujet sur mon blog via mon profil.
J'ai changé la configuration d'essai pour utiliser l'UTF-8, et je impemented personnalisé PrintStream comme suit: "PrintStream utfout = new PrintStream(Système d'.hors, false, "UTF-8"); System.sera(utfout);', mais les caractères ne s'affichent pas correctement dans l'Eclipse de la fenêtre de console. Étrangement, ils ont disparu de l'affichage de '?' pour un bloc carré au lieu de cela, de sorte que quelque chose se passe. Tout simplement pas sûr de ce que.
C'est effectivement mieux, mais c'est là que ça peut devenir difficile. Sur mon système, en dépit de l'aide de Courier New qui ne supporte pas les Chinois du graphisme, de la police de substitution est utilisé pour rendre Chinois cordes. Je crois SWT sur Windows utilise Uniscribe, de sorte que vous pourriez avoir besoin de lire sur les API Win32 pour voir comment cela se passe. Vous pourriez ne pas avoir la bonne combinaison de polices installées. Vous pourriez commutateur de polices pour l'une où les points de code sont pris en charge.
Merci. Juste essayé une poignée de différentes polices de caractères pour la sortie de la console et 'Lucida Sans Unicode' a fait le tour. Je ne savais pas que certaines polices ne pas inclure certains idéogrammes - pensé qu'il était tout à voir avec l'encodage. Considérez-moi instruits.
OriginalL'auteur McDowell
Ouais, vous avez besoin de changer l'encodage de l'Éclipse de la console, comme l'explique cette comment-afficher-chinois-caractère-en-eclipse-console article
OriginalL'auteur asgs
Le programme suivant imprime des caractères CJK à la console en utilisant TextPad. Pour voir le coréen (Hangul) et Japonais Hiragana j'ai eu à dire à Java pour modifier le flux d'impression de l'encodage à EUC_KR et définir les propriétés de TextPad de l'outil de la fenêtre de sortie:
Sortie de l'outil est:
가다 こんにちは
OriginalL'auteur Ed Poor
En fonction de votre plate-forme, il est fortement probable que votre console (ou windows CMD) ne prend pas en charge ou de l'utilisation de l'UTF-8 characterset, et à cet effet, convertit tous les caractères impossibles à mapper à un point d'interrogation.
Sur Windows par exemple CMD utilise presque toujours WIN1252 ou un similaire sur un seul octet characterset.
Rediriger la sortie vers un fichier et ouvrez ce fichier avec un encodage UTF-8 capable de l'éditeur.
Hammarström - Merci pour la suggestion. J'ai écrit la chaîne vers l'arrière dans un fichier à l'aide d'un OutputStreamWriter avec l'UTF-8 jeu de caractères spécifié, et le fichier résultant ne montrer les caractères correctement dans une autre application, donc je suppose que tout est bien. Doit tout simplement être l'Éclipse de la console qui m'a jeté.
OriginalL'auteur Mark Rotteveel