背景: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です。
私が試すべき他のエンコーディングはありますか?他の誰かがこの種のものを見ましたか?