Question

J'essaie de lire des données sur un port série Windows via Java. J'ai les bibliothèques javax.comm et je peux obtenir des données mais pas les données correctes. Lorsque je lis le port dans un tableau d'octets et que je le convertis en texte, je reçois une série de caractères mais pas de chaîne de texte réelle. J'ai essayé de spécifier le tableau d'octets comme étant à la fois & "; UTF-8 &"; et " US-ASCII " ;. Est-ce que quelqu'un sait comment obtenir du vrai texte?

Voici mon code:

while (inputStream.available() > 0) {
 int numBytes = inputStream.read(readBuffer);
 System.out.println("Reading from " + portId.getName() + ": ");
 System.out.println("Read " + numBytes + " bytes");
}

System.out.println(new String(readBuffer));
System.out.println(new String(readBuffer, "UTF-8"));
System.out.println(new String(readBuffer, "US-ASCII"));

la sortie des trois premières lignes ne me laissera pas copier et coller (je suppose parce que ce ne sont pas des caractères normaux). Voici la sortie du Hex: 78786000e67e9e60061e8606781e66e0869e98e086f89898861878809e1e9880

Je lis un appareil Hollux GPS qui affiche le format de chaîne. Je le sais avec certitude parce que je l’ai fait en C #.

Les paramètres que j'utilise pour la communication et que je connais bien depuis le travail dans l'application C # sont les suivants: Débit en bauds: 9600 Base de données: 8 Bit d'arrêt: 1 parité: aucune

Était-ce utile?

La solution

Je ne peux pas le savoir à partir de votre code, mais il semblerait que vous utilisiez java.io.InputStream pour lire l'objet. Vous devez utiliser java.io.BufferedReader ou java.io.InputSreamReader.

Il existe plusieurs façons de procéder, mais voici ce que nous utilisons:

javax.comm.SerialPort port = ...{initialize your serial port}
BufferedReader portReader = 
    new BufferedReader(new InputStreamReader(port.getInputStream()));

try {
    String line = portReader.readLine();
} catch(IOException e) { ... }

Autres conseils

Il est probable que l'appareil connecté n'utilise pas de protocole de texte. De nombreux appareils utilisent un format de message binaire pouvant contenir du texte mais représentent d’autres informations avec des codes plus compacts.

Veuillez modifier votre question et fournir des informations supplémentaires, telles que le périphérique avec lequel vous communiquez via le port série et la sortie obtenue à partir du code que vous avez exécuté. Un autre résultat utile à ajouter serait quelque chose qui imprime une représentation hexadécimale des données que vous avez lues. Une méthode rapide pour cela est la suivante:

import java.math.BigInteger;
...
System.out.println(new BigInteger(1, readBuffer).toString(16));

Je n'ai pas travaillé avec Holux GPS, mais j'ai écrit une interface Garmin avec javax.comm. Dans ce cas, l'unité utilise un protocole Garmin propriétaire (binaire) par défaut, mais le protocole NMEA 0183 (basé sur du texte) peut être activé sur le périphérique. Est-il possible que vous receviez un format de message Holux propriétaire et que vous deviez utiliser une commande sur l’unité GPS pour changer de protocole?

 byte[] readBuffer = null;
                try {
                    while (inputStream.available() > 0) {
                        int n = inputStream.available();
                        readBuffer = new byte[n];
                        inputStream.read(readBuffer, 0, n);
                    }
                    String y = new String(readBuffer, StandardCharsets.ISO_8859_1);
                    String str = new String(readBuffer, "UTF-8");
                    jTextField3.setText("    " + str+ "    ");

s'il vous plaît me pour chaîne de binaire

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top