質問

背景: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(); SERIALPORT.EVENT.DATA_AVAILABLEの場合のwhileループで 整数cを印刷して文字にキャストされている((char)c)。 問題は、数字と結果の文字が高すぎる(範囲は135 - 250)ということです。 メッセージがすべて「All Rights Reserved。)」で終わり、各メッセージの最後の文字は同じです。 ただし、シフトは文字ごとに一致しません。 他のエンコーディングを試してみました: UTF8 / UTF-8数値をさらに高くシフトします。 ASCII / US - ASCIIと同様に。 CP1252は、65533,8222および8240にシフトされている3文字を除いて、数字を130 - 350範囲にシフトします。 注:InputStreader.getEncoding()UTF8とUTF-8を使用すると、UTF8とASCII、およびUSCIIはASCIIです。

他のエンコーディングは試してみるべきですか?このようなものを見た他の誰か?

役に立ちましたか?

解決

ほぼ同じことをやっています。9600ボー、8N1(8データビット、パリティなし、1ストップビット)、そしてキャラクターシフトに関する問題はありません。エンコーディング、どこでも設定していません。

私たちの入力ストリームは単にInputStream型のもので、SerialPort.getInputStream()で設定されています。

InputStreamReaderからステップを戻して、単純な「InputStream」を使用してください。エンコーディングはそれ自身の世話をするべきです。

何らかの形で助けてくれることを願っています

- GMale

他のヒント

2つのワイヤサービスポートを持つ。私が投稿したのは、TCPのハードウェア構成間の競合になることが判明したのはDIGIと呼ばれるシリアルデバイスへの競合になりました。COM5シリアル設定を9600,7,1,0,0に変更することで、そのポートの問題を解決することができました。値のシフトは8データビット対7の使用によるものでした。これは、これは私が一致するコード内のポートパラメータを変更しなければならなかったことを意味しました。読者が不要だったという点であなたの正しいですが、それが符号化で変化の変化を見ることによって私が解決策に到着するのを助けました。

今私は2番目の港の魔法を探しています。

2番目のポート設定は9600を使用して1200,8,1,0,0で、ストリームは約128sを持つ0sです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top