Java inputStreamReader Charset
Je veux faire un ping vers l'adresse IP cible et de recevoir une réponse. Pour ce faire, je suis en utilisant une ligne de commande windows en Java avec de l'exécution.méthode exec et la classe de processus. J'ai la réponse à l'aide de inputStreamReader.
Mon jeu de caractères par défaut est windows-1254, c'est le turc. Lorsque je le reçois, la réponse contient des caractères turcs mais des caractères turcs ne sont pas affichés correctement dans la console.
Je veux obtenir une valeur numérique de la réponse que je reçois, mais la valeur que je suis à la recherche d'contient certains caractères turcs, donc quand je cherche, je ne le trouve pas.
Les codes ci-dessous, ce que j'ai besoin de savoir comment obtenir les caractères turcs visible ici:
runtime = Runtime.getRuntime();
process = runtime.exec(pingCommand);
BufferedReader bReader = new BufferedReader(
new InputStreamReader(process.getInputStream(), "UTF8"));
String inputLine;
while ((inputLine = bReader.readLine()) != null) {
pingResult += inputLine;
}
bReader.close();
process.destroy();
System.out.println(pingResult);
- pourquoi êtes-vous en précisant "UTF-8" si vous savez que votre encodage est "windows-1254"?
- Euh, Vous êtes en précisant
UTF8
. - J'ai essayé windows-1254, malheureusement, le même résultat.
Vous devez vous connecter pour publier un commentaire.
Afin de résoudre ce problème, vérifier que le jeu de caractères que votre système d'exploitation actuel utilise sur sa ligne de commande et l'obtention de données compatible avec ce jeu de caractères est nécessaire.
J'ai compris que le jeu de caractères pour les turcs XP ligne de commande est CP857, et lorsque vous modifiez le code comme ci-dessous, le problème est résolu.
Merci pour votre aide.
Remarque : Vous pouvez apprendre à votre ligne de commande par défaut charset par "chcp de la commande".
Vous dites que les personnages sont en train d'être lues correctement par le Système.n'est pas l'impression de leur droit? Système.est certainement un VIEUX de la classe. Peut-être essayer
Qui POURRAIENT travailler
Si vous avez juste besoin de ping et obtenir le temps de réponse, puis la lecture de la sortie de la console peut être exagéré. Il y a un moyen plus facile aussi longtemps que vous êtes à l'aide de Java5 ou plus récent:
Ici est un programme complet que vous pouvez utiliser pour ce faire. REMARQUE: Sur les systèmes Unix/Linux/Mac OS, vous devez exécuter ce programme en vertu de "sudo" pour obtenir une réponse à partir d'autre chose que de "localhost".
Voici les résultats que j'ai reçu quand j'ai couru le suivant sur Mac OS (les résultats sont en millisecondes):
Reponse horaires peuvent varier entre les courses, mais je vais voir < 20 millisecondes de temps de réponse à la plupart des grands sites, surtout si vous exécutez plusieurs pings
Système.hors(...) - et la console Java - est assez limité dans le codage. Vous pouvez vous attendre de base des caractères ASCII pour le travail, et c'est tout. Si vous souhaitez utiliser un autre encodage, alors que vous devriez écrire la sortie dans un fichier texte ou un GRAPHIQUE. Si vous écrivez à la console, vous aurez toujours à faire face à une mauvaise manipulation de divers caractères non-ASCII.
Vous avez besoin de changer votre eclipse encodage par défaut paramètre dans les préférences. Il peut être réglé à
UTF8
.Essayer cette ligne de commande:
Ma ligne de commande répondu 866 j'ai donc utilisé CP866