最初の 2 バイトでメッセージの長さを送信する必要があります。
メッセージの長さを計算すると、752 であることがわかりました。つまり、16 進数で 02F0 とします。次に、この 16 進値に対応する特別な記号を計算する必要があります。私が使用するものを取得するため
int num1 = Integer.parseInt("F0", 16);
char c1 = (char) num1;
to get -> ð 最初の文字は (エンコーディングのために) そこには表示されませんが、正しい文字は取得できます。とにかく、これらの特殊文字を最終メッセージ文字列 (ASCII) に連結すると、02F0 から 023f に変更されます (最終メッセージをウルトラエディット 16 進ビューで読み取ることによって確認されました)。なぜそれが起こっているのですか?3F は 10 進数で 63 であり、次のコード スニペットでも同じことが起こっていることがわかります->
Charset asciicharset = Charset.forName("ASCII");
Charset iso88591charset = Charset.forName("ISO-8859-1");
byte [] a = new byte[]{(byte)0x02, (byte)0xF0};
ByteBuffer inputBuffer = ByteBuffer.wrap(a);
CharBuffer data = asciicharset .decode(inputBuffer);
ByteBuffer outputBuffer = asciicharset .encode(data); --> This is where instead of 240
for F0 I get 63, in fact I tried with any value more than 63 but it always comes back to
that
byte[] outputData = outputBuffer.array();
どんな助けでも大歓迎です。ありがとう。