2010-07-12 102 views
0

背景:使用RealPort軟件創建的Windows Server 2003 R2有線服務虛擬串口, 串口配置爲COM5,9600波特,8個數據位,無奇偶校驗位,1個停止位,無流量控制, 使用RXTX 2.1-7。RXTX虛擬串口讀取問題

找到端口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) 消息全部以「All Rights Reserved。」結尾),每條消息中的最後一個字符相同。 然而,從人物到人物的轉變並不一致。 已嘗試過其他編碼: UTF8/UTF-8將數字轉換得更高。 ascii/us-ascii也是如此。 Cp1252將數字移動到130-350範圍,但是移動到65533,8222和8240的3個字符除外。 注意:使用InputStreamReader.getEncoding()UTF8和UTF-8是UTF8和ASCII,us-ascii是ASCII 。

我應該嘗試其他編碼嗎?其他人看過這種東西?

回答

1

我正在做幾乎完全相同的事情。 9600波特,8N1(8位數據位,無奇偶校驗,1位停止位),我們沒有字符移位的問題。我們甚至沒有在任何地方設置編碼。

我們的輸入流是簡單的InputStream類型,它是用serialPort.getInputStream()設置的;

嘗試從InputStreamReader中退出,並使用簡單的「InputStream」。編碼應該自己處理。

希望幫助在某種程度上,

--gMale

0

有兩個線服務端口。我之前發佈的一篇關於TCP到稱爲Digi的串行設備的硬件配置之間的衝突。我能夠通過將COM5串行設置更改爲9600,7,1,0,0來解決該端口上的問題。值的轉移是由於使用了8個數據位vs 7。這當然意味着我必須更改代碼中的端口參數才能匹配。你的正確之處在於讀者是不必要的,但是它確實幫助我通過觀察編碼的切換變化來達到解決方案,直到我意識到更少的數據位也會具有相同的效果。

現在我正在尋找第二個港口的魔法。

第二個端口設置爲1200,8,1,0,0,使用9600導致流大部分爲0,有128個。