开发者社区> 问答> 正文

关于java Socket UDP通信转码问题

发送端:
public class UDPSend {
public static void main(String[] args) throws IOException {
DatagramSocket ds =new DatagramSocket();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//输入数据
String line=null;
while((line=br.readLine())!=null)
{
if("886".equals(line))
{
break;
}
byte[] b=line.getBytes();
DatagramPacket dp=new DatagramPacket
(b,b.length,InetAddress.getByName("192.168.252.1"),3303);
ds.send(dp);
}
ds.close();
}
}
接收端:
public class UPDReceive {
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket(3303);
while(true)
{
byte[] b=new byte[1024];
DatagramPacket dp=new DatagramPacket(b,b.length);
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String s=new String(dp.getData(),0,dp.getLength(),"UTF-8");
System.out.println("ip:"+ip+",字符串:"+s);
}
}
}

结果我在发送端输入"你好“,接收端的结果是:ip:192.168.252.1,字符串:浣犲ソ
字符串的内容并没有转码。我这个项目的Text file encoding属性也设置成UTF-8了
为什么结果没有转码呢?

展开
收起
蛮大人123 2016-03-25 16:59:15 2488 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    发送端用的编码是系统默认的编码file.encoding属性对应的编码,而不是UTF-8,所以接收端用UTF-8转换时输出的是乱码。
    修正UDPSend端代码,两端统一用同一个:
    byte[] b = line.getBytes("UTF-8");
    还是统一设置下比较好,你可以看下getBytes源码,跟踪下默认使用的编码到底是哪个,可以肯定不是UTF-8的。因为你不能保证最终项目所在环境的编码一定就是UTF-8,你本机就是一个例子。

    2019-07-17 19:14:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载