Domanda

Sfondo: Windows Server 2003 R2, Porta seriale virtuale del servizio del filo creata con software RealPort, Porta seriale configurata come COM5, 9600 BAUD, 8 bit di dati, nessun bit di parità, 1 bit di arresto, nessun controllo di flusso, Utilizzo di RXTX 2.1-7.

La porta Com5 viene trovata, la porta seriale viene creata utilizzando il metodo PortID.Open e i parametri della porta e il controllo del flusso sono impostati per adattarsi alle impostazioni del driver del dispositivo sopra riportate. Ottengo il Serialport Intupstream e avvolgerlo in un inputstreamReader in modo da poter controllare la codifica dell'ingresso. La codifica predefinita è ovviamente CP1252 Ho letto che se si utilizza 8 bit di dati, la codifica dovrebbe essere ISO-8859-1 aka Latin1. e sto usando il metodo InputStreamReader: int c= isr.read (); In un po 'loop nel caso serialport.event.data_available Stampa fuori il numero intero c ed è calato su un personaggio ((char) c); Il problema è che i numeri e i caratteri risultanti vengono spostati troppo alti (la gamma è 135 - 250) I messaggi finiscono tutti con "Tutti i diritti riservati)." E gli ultimi caratteri in ciascun messaggio sono gli stessi. Tuttavia, il turno non è coerente dal carattere al carattere. Hanno provato altre codifiche: UTF8 / UTF-8 Sposta i numeri ancora più in alto. Come ASCII / US-ASCII. CP1252 sposta i numeri alla gamma 130 - 350 ad eccezione di 3 caratteri che vengono spostati a 65533, 8222 e 8240. Nota: l'utilizzo di InputStreamReader.Gelescoding () UTF8 e UTF-8 sono UTF8 e ASCII e US-ASCII sono ASCII.

Ci sono altre codifiche che dovrei provare? Qualcun altro ha visto questo genere di cose?

È stato utile?

Soluzione

Sto facendo quasi la stessa identica cosa.9600 Baud, 8N1 (8 bit di dati, nessuna parità, 1 bit di arresto) e non abbiamo problemi con il cambio del carattere.Non abbiamo nemmeno impostato la codifica, ovunque.

Il nostro flusso di ingresso è semplicemente di tipo Inputstream ed è impostato con serialport.getinputStream ();

Prova a fare un passo indietro da InputStreamReader e semplicemente usando un semplice "Inputstream".La codifica dovrebbe prendersi cura di se stessa.

Spero che ti aiuti in qualche modo,

- GMALE

Altri suggerimenti

Avere due delle porte del servizio del filo.Quello che ho pubblicato su è risultato essere un conflitto tra la configurazione hardware nel dispositivo TCP al seriale chiamato Digi.Sono stato in grado di rimediare al problema su quella porta cambiando le impostazioni seriali Com5 a 9600,7,1,0,0.Lo spostamento dei valori è dovuto all'utilizzo di 8 bit di dati VS 7. Ciò significato, naturalmente, ho dovuto modificare i parametri della porta nel codice in cui corrispondere.Il tuo corretto in quanto il lettore non era necessario, tuttavia mi ha aiutato ad arrivare alla soluzione guardando il cambio di cambio con la codifica, finché non mi ha fatto venire in poi che meno bit di dati avrebbero anche lo stesso effetto.

Ora sto cercando la magia sulla seconda porta.

Le impostazioni della seconda porta sono state 1200,8,1,0,0 con 9600 hanno causato lo streaming del flusso per lo più 0s con circa 128S.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top