Pourquoi Java BufferedReader () ne lit-il pas correctement les caractères arabes et chinois?
J'essaie de lire un fichier qui contient l'anglais & caractères arabes sur chaque ligne et un autre fichier qui contient l'anglais & caractères Chinois sur chaque ligne. Cependant, les caractères de la langue arabe et Chinois ne parviennent pas à voir correctement: il suffit qu'ils apparaissent comme des points d'interrogation. Une idée de comment je peux résoudre ce problème?
Voici le code que j'utilise pour la lecture:
try {
String sCurrentLine;
BufferedReader br = new BufferedReader(new FileReader(directionOfTargetFile));
int counter = 0;
while ((sCurrentLine = br.readLine()) != null) {
String lineFixedHolder = converter.fixParsedParagraph(sCurrentLine);
System.out.println("The line number "+ counter
+ " contain : " + sCurrentLine);
counter++;
}
}
Édition 01
Après la lecture de la ligne et d'obtenir l'arabe et le Chinois mot que j'utilise une fonction pour traduire simplement par la recherche de Donné le Texte arabe dans une ArrayList (qui contiennent tous les mots) (à l'aide d'indexOf(); la méthode). Puis, quand le mot de l'indice est trouvé, il est utilisé pour appeler le mot en anglais qui a le même indice dans une autre liste de tableaux. Cependant, cette recherche renvoie toujours faux car il échoue lors de la recherche des points d'interrogation à la place de la langue arabe et en caractères Chinois. Donc mon Système..println impression de me montre les valeurs null, un pour chaque échec à traduire.
*Je suis à l'aide de Netbeans 6.8 version Mac IDE
Édition 02
Voici le code de la recherche, de la traduction:
int testColor = dbColorArb.indexOf(wordToTranslate);
int testBrand = -1;
if ( testColor != -1 ) {
String result = (String)dbColorEng.get(testColor);
return result;
} else {
testBrand = dbBrandArb.indexOf(wordToTranslate);
}
//System.out.println ("The testBrand is : " + testBrand);
if ( testBrand != -1 ) {
String result = (String)dbBrandEng.get(testBrand);
return result;
} else {
//System.out.println ("The first null");
return null;
}
En fait, je suis à la recherche de 2 Arraylists qui peut contenir le mot de votre choix pour traduire. Si elle ne parvient pas à les trouver dans les deux ArrayLists, la valeur null est retournée.
Édition 03
Quand je debug, j'ai trouvé que les lignes en cours de lecture sont stockés dans ma variable de Chaîne comme suit:
"3;0000000000;0000001001;1996-06-22;;2010-01-27;����;;01989;������;"
Édition 03
Le fichier que je suis en train de lire m'a été donné après qu'il a été modifié par un autre programme (dont je ne sais rien sur les côté c'est fait en VB) le programme de l'arabe lettres qui n'apparaissent pas correctement à apparaître. Quand j'ai vérifié l'encodage du fichier sur Notepad++, il a montré que c'est la norme ANSI. cependant, quand je le convertir en UTF8 (qui a remplacé la lettre arabe avec d'autres en anglais), puis de la convertir à la norme ANSI arabe, de devenir des points d'interrogation!
source d'informationauteur |
Vous devez vous connecter pour publier un commentaire.
FileReader
javadoc:Donc:
Si cela ne fonctionne toujours pas, alors peut-être que votre console n'est pas configuré pour afficher correctement les caractères UTF-8. La Configuration dépend de l'IDE utilisé et est plutôt simple.
Mise à jour : Dans le code ci-dessus, remplacer
utf-8
aveccp1256
. Cela fonctionne très bien pour moi (WinXP, JDK6)Mais je recommande que vous insistez sur le fichier généré à l'aide de l'UTF-8. Parce que
cp1256
ne fonctionne pas pour le Chinois et vous aurez des problèmes similaires de nouveau.IL est plus probable que la Lecture de l'information correctement, cependant votre flux de sortie est probablement pas en UTF-8, et donc n'importe quel caractère qui ne peuvent pas être affichés dans votre sortie de caractère est remplacé par le '?'.
Vous pouvez le vérifier en demandant à chaque personnage et l'impression du caractère ordinal.