背景:Windows Server 2003 R2,使用Realport软件创建的Wire Service Virtual Serial端口, 串口配置为COM5,9600波特,8个数据位,无奇偶校验位,1个停止位,无流量控制, 使用Rxtx 2.1-7。

找到端口COM5,使用PortiD.Open方法创建串行端口,并将端口参数和流量控制设置为匹配上面的设备驱动程序设置。 我得到了SerialPort IntupStream并将其包装在InputStreamReader中,以便控制输入编码。 默认编码当然是cp1252 我读到了如果您使用的是8个数据位,则编码应该是ISO-8859-1 AKA Latin1。 我正在使用InputStreamReader方法: int c= isr.read(); 在is serialport.event.data_available中的一段时间循环 打印出整数C并将其投射到角色((char)c); 问题是数字和结果字符转移得太高(范围是135 - 250) 消息全部以“保留所有权利为止”。并且每个消息中的最后一个字符都是相同的。 但是,班次与字符与字符不一致。 尝试过其他编码: UTF8 / UTF-8将数字换档甚至更高。和ASCII / US-ASCII一样。 CP1252将数字移至130-350范围,除了向65533,8222和8240移位的3个字符之外。 注意:使用InputStreamReader.getEncoding()UTF8和UTF-8是UTF8,ASCII和US-ASCII是ASCII。

是否有其他编码我应该尝试?别人看到这种事情?

有帮助吗?

解决方案

我几乎完全相同。9600波特,8N1(8个数据位,无奇偶校验,1个停止位),并且我们没有字符转移的问题。我们甚至没有设置编码,任何地方。

我们的输入流只是输入的类型InputStream,它设置了SerialPort.getInputStream();

尝试从InputStreamReader踩回并使用普通的“InputStream”。编码应该照顾自己。

希望以某种方式有助于,

- gmale

其他提示

有两个电线服务端口。我张贴的I一个我已发表于TCP中的硬件配置与称为DIGI的串行设备之间的冲突。我能够通过将COM5串行设置更改为9600,7,1,0,0来纠正该端口上的问题。值的转换是由于使用8个数据位VS 7.这当然意味着我必须更改代码中的端口参数以匹配。你的正确读者是不必要的,但是它确实通过观看了编码的换档变化来帮助我到达解决方案,直到它对我来说,较少的数据位也具有相同的效果。

现在我正在寻找第二端口上的魔法。

第二端口设置为1200,8,1,0,0,使用9600导致流大部分为0.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top