Pergunta

Background: Windows Server 2003 R2, a porta serial virtual do serviço do fio criada com o software Realport, Porta serial configurada como com5, 9600 baud, 8 bits de dados, sem bits de paridade, 1 parada, sem controle de fluxo, Usando RXX 2.1-7.

A porta COM5 é encontrada, a porta serial é criada usando o método e os parâmetros de porta do portid.open e o controle de fluxo são definidos para corresponder às configurações do driver do dispositivo acima. Eu recebo o serialport intupstream e envolvo em um inutststreamReader para que eu possa controlar a codificação de entrada. A codificação padrão é, é claro, cp1252 Eu li que se você estiver usando 8 bits de dados, a codificação deve ser ISO-8859-1 aka latin1. e estou usando o método InputStreamReader: int c= isr.read (); em um loop while no caso serialport.event.data_available Imprimindo o inteiro C e é fundido a um caractere ((char) c); O problema é que os números e caracteres resultantes são deslocados muito altos (intervalo é 135 - 250) As mensagens terminam com "Todos os direitos reservados.)" E os últimos personagens em cada mensagem são os mesmos. No entanto, a mudança não é consistente de caractere ao caractere. Tentei outras codificações: UTF8 / UTF-8 Desloque os números ainda mais altos. como ASCII / US-ASCII. O CP1252 desloca os números para o intervalo de 130 - 350, exceto por 3 caracteres que são deslocados para 65533, 8222 e 8240. Nota: Usando o InputStreamReader.GetencoDing () UTF8 e UTF-8 são UTF8 e ASCII e US-ASCII são ASCII.

Existem outros codificações que eu deveria tentar? Alguém mais viu esse tipo de coisa?

Foi útil?

Solução

Estou fazendo quase exatamente a mesma coisa.9600 Baud, 8n1 (8 bits de dados, sem paridade, 1 parada) e não temos problemas com o deslocamento de personagens.Nós nem nos separamos da codificação, em qualquer lugar.

Nosso fluxo de entrada é simplesmente do tipo InputStream e é definido com serialport.getinputstream ();

Tente recuar do InputStreamReader e apenas usando um "InputStream".A codificação deve cuidar de si mesma.

Espero que ajude de alguma forma,

- gmale

Outras dicas

Tem duas das portas de serviço de fio.Eu mesmo postei sobre como um conflito entre a configuração de hardware no TCP para o dispositivo serial chamado Digi.Eu consegui remediar o problema nesse porto, alterando as configurações seriais COM5 para 9600,7,1,0,0.O deslocamento de valores foi devido ao uso de 8 bits de dados vs 7. Isto significava que eu tinha que alterar os parâmetros portuários no código para corresponder.O seu correto em que o leitor era desnecessário, no entanto, isso me ajudou a chegar à solução assistindo a mudança de mudança com a codificação, até que se desmaiou que menos bits de dados também teriam o mesmo efeito.

Agora estou procurando a magia na segunda porta.

As segundas configurações da porta foram 1200,8,1,0,0 usando 9600 fez com que o fluxo seja principalmente 0s com cerca de 128s.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top