En essayant de montrer que les caractères arabes Java
Je suis en train d'essayer de montrer caractères arabes dans une applet Java mais je reçois toujours de points d'interrogation '?????'.
J'ai essayé beaucoup de solutions, sans succès:
- À l'aide de la nouvelle Chaîne de caractères(octets [], charsetName) de l'UTF-8 décoder.
- Changer de jeu de caractères par défaut dans Netbeans: -Dfile.encoding=UTF8 dans VM options et de codage UTF8 dans la compilation des options.
- À l'aide de ByteArrayOutputStream pour l'encodage.
- En utilisant à la fois de l'utf-8 et UTF-8 jeu de caractères des noms.
Je suis avec Windows 7 en langue espagnole de l'environnement.
Certaines solutions de travail lors de l'exécution de Netbeans, mais ils ne fonctionnent pas en dehors de cet environnement. Ici, il est Projet Netbeans avec les sources et les .jar.
C'est simple code, je suis en utilisant:
package javaapplication4;
import java.io.ByteArrayOutputStream;
import java.nio.charset.Charset;
import javax.swing.JApplet;
import javax.swing.JOptionPane;
public class JavaApplication4 extends JApplet{
@Override
public void init(){
try {
String str1 = new String("تعطي يونيكود رقما فريدا لكل حرف".getBytes(), "UTF-8");
JOptionPane.showMessageDialog(rootPane, str1);
String str2 = new String("تعطي يونيكود رقما فر");
ByteArrayOutputStream os = new ByteArrayOutputStream();
os.write(str2.getBytes());
JOptionPane.showMessageDialog(rootPane, os.toString("UTF-8"));
} catch (Exception ex) {
JOptionPane.showMessageDialog(rootPane, ex.toString());
}
}
}
Aucune idée de ce qui se passe?
Pour mieux aider plus tôt, après une SSCCE.
Des points d'interrogation: ????? ???? ?????
Ces deux méthodes ne font pas beaucoup - un
Votre code contient arabe, pas de caractères hébreux, même s'il est probablement fait aucune différence dans votre cas.
Des points d'interrogation: ????? ???? ?????
Ces deux méthodes ne font pas beaucoup - un
String
est un String
. L'encodage est applicable uniquement si vous lisez byte
s à partir d'un fichier et en ont besoin pour devenir char
s.Votre code contient arabe, pas de caractères hébreux, même s'il est probablement fait aucune différence dans votre cas.
OriginalL'auteur J punto Marcos | 2013-02-21
Vous devez vous connecter pour publier un commentaire.
Ma Réponse est fausse: getBytes() produit un objet bytearray en utilisant le système de codage par défaut, qui netbeans ensembles de l'UTF-8.
Réponse correcte: Ne pas utiliser ByteArrayOutputStream et new String(byte[], Charset). Utilisez uniquement des Chaînes de caractères. Devrait fonctionner correctement.
EDIT: Voir les commentaires pour le problème réel et l'explication pourquoi la solution n'est pas complètement possible.
Eh bien c'est votre problème. Le Système.hors flux utilise la valeur par défaut du système de codage. Sous Windows, le système par défaut l'encodage est malheureusement pas à la hauteur de l'encodage de la ligne de commande (cmd). Vous avez besoin d'un new PrintWriter(Système d'.hors, La "Ligne de Commande de Codage") pour obtenir que cela fonctionne. Et selon le système, il n'existe AUCUN MOYEN d'imprimer les caractères arabes, depuis windows par exemple ne peut pas utiliser l'encodage unicode dans la ligne de commande. Vous pouvez modifier votre système de la langue (dans les paramètres de windows) pour un arabe d'encodage, mais qui n'est probablement pas ce que vous voulez^^
Netbeans fenêtre de la console utilise utf-8, et depuis votre code imprime utf-8, il fonctionne.
De toute façon, si vous avez vraiment besoin de convertir une Chaîne d'octets[], vous devez appeler le str.getBytes("UTF-8") qui indique le jeu de caractères à éviter le défaut.
Même Problème, je suis confronté à, mais je suis en utilisant des winforms et la prise d'entrée dans le champ de texte et ici, il fonctionne très bien, mais quand je suis en train de données dans textfield je reçois des points d'interrogation, que faire
OriginalL'auteur John Smith
os.toString(...) est la mauvaise méthode. Il suppose que les caractères à l'intérieur de la ByteArrayOutputStream sont en utf-8, ce qui n'est pas correcte, car java utilise l'utf-16. La sortie de la méthode sur l'autre main est valide java Chaîne qui est nouveau: utf-16.
Si vous utilisez un tableau qui contient utf-16 caractères interpréter comme de l'utf-8 et le convertir en utf-16. Là, vous avez votre problème ^^
EDIT: même problème avec la ligne:
getBytes() produit de l'UTF-16 [C'EST FAUX, VOIR MON AUTRE RÉPONSE], et vous l'utiliser pour créer une Chaîne (le tableau en tant que UTF-8
Bon, de mon erreur: à partir de la javadoc de getBytes(): "Code pour cette Chaîne en une séquence d'octets à l'aide de la plate-forme du jeu de caractères par défaut" qui netbeans de l'ensemble de l'utf-8. Que diriez-vous de ne pas utiliser getBytes() et Bytearrayoutputstream à tous. Devrait fonctionner très bien sans elle.
quand j'ai lu le texte arabe à partir de fichiers texte et l'imprimer, il apparaît comme cette اÙ"Ø£Ø3ÙاÙ"Ø£Ø3ÙˆØ, comment je peux retourner l'écriture à son à caractères arabes
J'ai le même problème, avez vous trouvé une solution?
OriginalL'auteur John Smith
La solution la plus simple serait à l'aide de cordes normalement et la modification de l'encodage par défaut dans votre espace de travail par exemple eclipse.
Windows-->Préférences - >-->espace de travail-->Texte de codage de fichiers
Changer le codage UTF-8.
Il n'y a pas de magie ici.
OriginalL'auteur Yishagerew
Si votre code source est codé en UTF-8, vous devez définir la
-encoding
paramètre lors de la compilation. Sinon, le compilateur va utiliser le système de codage par défaut, ce qui est probablement cp1252 dans votre cas (Windows 7, espagnol), et ne prend pas en charge l'arabe.Vous devez supprimer toutes les conversions en octets, ils ne peuvent que rendre le pire. C'est la façon dont il devrait fonctionner:
Si vous ne pouvez pas régler les options du compilateur, vous pouvez utiliser les codes d'échappement pour coder les caractères de l'ASCII. Le
native2ascii
outil de ligne de commande peut faire cette conversion pour vous. Par exemple, le code généré pour les deux lignes ci-dessus serait:OriginalL'auteur Joni
changer la configuration de l'encodage UTF-8 à partir de la Modifier menus sur Eclipse
OriginalL'auteur user7037815
je veux vous montrer un exemple très utile de code, à propos de l'arabe dans jOptionPane message, j'utilise jlabel pour résoudre ce problème, essayez ceci:
OriginalL'auteur treeteq
J'ai été confronté à ce problème dans Windows Server 2016, mes caractères arabes où se passa comme "???" dans Netbeans.
Solution:
OriginalL'auteur Allen BMC