我正在构建一个工具,它从地震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