我正在構建一個工具,它從地震3引擎主服務器(在這種情況下cod2主服務器)檢索服務器列表。 這些主服務器響應包含ip端口信息的大字符串。 這裏的ip是4個字符,每個字符都應該轉換爲一個數字(1-255)。 雖然當我嘗試這個128以上的數字轉換爲這個Unicode替換字符(65533或fffd)。Java無法獲得正確的值爲瓦爾斯
我試了幾件事情:
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));
在PHP與功能相同的字符串這一切工作:
ord(char);
我認爲這個問題可能是我的Java使用unicode的,我認爲它應該使用ascii(或擴展ascii,不知道)。
[8N] < <這4個字符翻譯正確
ZH < <繼承人一個這是不正確的,我只是不能從我的控制檯複製正確的符號,如果我把它寫入一個txt文件我與每個文本編輯器得到完全不同的結果,所以你..
任何解決方案?
如何創建的字符串?你提供一個與服務器相匹配的編碼嗎? – Thomas
我使用DatagramPacket與一個字節[]緩衝區並將retreived消息放在一個字符串中,我不提供任何編碼,我不知道如何 – Robin
「我不知道怎麼樣」 - 我建議你看看api然後。有幾個構造函數,比如'String(byte bytes [],Charset charset)'。如果你沒有傳遞字符集/編碼,將使用系統默認值,這很可能不是服務器使用的那種(我建議你在任何IO /轉換等操作中定義字符集)。但是Jorn的方法無論如何都是更好的方法,因爲如果你已經獲得了'byte []',就不需要使用'String'間接。 – Thomas