0

背景:Windows Server 2003 R2、RealPortソフトウェアで作成されたワイヤーサービス仮想シリアルポート、COM5として構成されたシリアルポート、9600ボー、8データビット、パリティビットなし、1ストップビット、フロー制御なし、RXTX2.1-7を使用。

ポートCOM5が見つかり、シリアルポートはportId.openメソッドを使用して作成され、ポートパラメーターとフロー制御は上記のデバイスドライバー設定と一致するように設定されます。serialPort IntupStreamを取得し、InputStreamReaderでラップして、入力エンコーディングを制御できるようにします。デフォルトのエンコーディングはもちろんCp1252です。8データビットを使用している場合、エンコーディングはISO-8859-1、別名Latin1である必要があることを読みました。そして、InputStreamReaderメソッドを使用しています。intc = isr.read(); ケースSerialPort.Event.DATA_AVAILABLEのwhileループで整数cを出力し、文字((char)c)にキャストします。問題は、数字と結果の文字のシフトが大きすぎることです(範囲は135〜250です)。メッセージはすべて「AllRights Reserved。)」で終わり、各メッセージの最後の文字は同じです。でも、シフトは文字間で一貫していません。他のエンコーディングを試しました:UTF8/UTF-8は数値をさらに高くシフトします。ascii/us-asciiもそうです。Cp1252は、65533、8222、および8240にシフトされる3文字を除いて、数値を130〜350の範囲にシフトします。注:InputStreamReader.getEncoding()の使用UTF8およびUTF-8はUTF8であり、asciiおよびus-asciiはASCIIです。

私が試すべき他のエンコーディングはありますか?他の誰かがこの種のものを見ましたか?

4

2 に答える 2

1

私はほとんど同じことをしています。9600ボー、8N1(8データビット、パリティなし、1ストップビット)で、文字シフトの問題はありません。どこにもエンコーディングを設定しません。

入力ストリームは単にInputStreamタイプであり、serialPort.getInputStream()で設定されます。

InputStreamReaderから戻って、単純な「InputStream」を使用してみてください。エンコーディングはそれ自体を処理する必要があります。

それが何らかの形で役立つことを願っています、

--g男性

于 2010-07-19T20:57:50.010 に答える
0

ワイヤーサービスポートを2つ用意します。私が投稿したものは、Digiと呼ばれるTCPtoSerialデバイスのハードウェア構成間の競合であることが判明しました。COM5のシリアル設定を9600,7,1,0,0に変更することで、そのポートの問題を解決することができました。値のシフトは、7に対して8データビットを使用したことが原因でした。これはもちろん、コード内のポートパラメータを一致するように変更する必要があることを意味しました。リーダーは不要でしたが、エンコードによるシフトの変化を監視することで解決策にたどり着くことができました。データビットが少なくても同じ効果があることがわかりました。

今、私は2番目のポートの魔法を探しています。

2番目のポート設定は1200,8,1,0,0で、9600を使用すると、ストリームはほとんど0になり、128がいくつかあります。

于 2010-07-20T13:52:32.773 に答える