背景:Windows Server 2003 R2,使用RealPort软件创建的Wire Service虚拟串口,串口配置为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(); 在 while 循环中 SerialPort.Event.DATA_AVAILABLE 打印出整数 c 并将其转换为字符 ((char)c); 问题是数字和生成的字符移动得太高(范围是 135 - 250) 消息都以“保留所有权利。)”结尾,并且每条消息中的最后一个字符都是相同的。然而,从一个角色到另一个角色的转变并不一致。尝试过其他编码:UTF8/UTF-8 将数字移得更高。ascii/us-ascii 也是如此。Cp1252 将数字移至 130 - 350 范围,但 3 个字符移至 65533、8222 和 8240。注意:使用 InputStreamReader.getEncoding() 时,UTF8 和 UTF-8 是 UTF8,ascii 和 us-ascii 是 ASCII。
我应该尝试其他编码吗?还有人见过这种东西吗?