私は、Quake 3エンジンマスターサーバー(この場合はcod2マスターサーバー)からサーバーリストを取得するツールを構築しています。 これらのマスターサーバーは、ip port infoを含む大きな文字列で応答します。 これは4文字で、数字はそれぞれ1〜255文字に変換されます。 これを試してみると、128を超える数字はこのユニコード置換文字(65533またはfffd)に変換されます。Java cantはvarsの正しい値を取得します
私はいくつか試してみました:PHPで
System.out.println("ip: "+String.format("%02x", (int)r.charAt(i+1))+"."+String.format("%02x", (int)r.charAt(i+2))+"."+String.format("%02x", (int)r.charAt(i+3))+"."+String.format("%02x", (int)r.charAt(i+4)));
System.out.println("ip: "+(int)r.charAt(i+1)+"."+(int)r.charAt(i+2)+"."+(int)r.charAt(i+3)+"."+(int)r.charAt(i+4));
この機能で同じ文字列を含むすべての作品:
ord(char);
私は問題は私のjavaはユニコードを使用していることかもしれないと思うし、そして私はそれがアスキー(または拡張ascii、わからない)を使用する必要がありますと思う。
[8N] < <これらの4つの文字が翻訳正しい
ZH < < HERESに1私はtxtファイルに書き込む場合は間違っていた、私はちょうどカントは私のコンソールから右のシンボルをコピーして、Iそれぞれのテキストエディタで全く異なる結果が得られますので、そうです。
すべての解決策はありますか?
どのように文字列を作成するのですか?サーバーのエンコーディングに一致するエンコーディングを指定していますか? – Thomas
私はDatagramPacketをbyte []バッファで使用し、取得したメッセージを文字列に入れます。どのエンコーディングも提供しません。 – Robin
どちらかわかりません。 - 私はあなたがAPI次に。 'String(byte bytes []、Charset charset)'のようないくつかのコンストラクタがあります。あなたがcharset/encodingを渡さなければ、システムのデフォルトが使用され、それはサーバによって使用されるものではないでしょう(私はあなたが任意のIO /変換などの操作で文字セットを定義することを推奨します)。しかし、Jornのアプローチは、あなたが 'byte [] 'をすでに取得している場合、' String'間接を使う必要がないので、とにかくより良い方法です。 – Thomas