这里是场景: 我有一个简单的客户端和服务器Java程序。 客户端向服务器发送一个希伯来字符串:אבג空格分隔。java - 网络上的希伯来字符被接收为问号
发送该数据报的客户端代码:
DatagramPacket packet = new DatagramPacket(msg.getBytes("UTF-8"), msg.getBytes("UTF-8").length);
packet.setSocketAddress(targetSock);
this.sock.send(packet);
味精是字符串类型,并且它包含希伯来语字符(从一个机器人的EditText对象)
Wireshark的显示字符串如下: d7 90 20 d7 91 20 d7 92
0x20是空格,希伯来字符是d7 90(1,2)。
接收该消息服务器上的代码: “????”
receivedata = new byte[size];
DatagramPacket recv_packet = new DatagramPacket(receivedata, receivedata.length);
inSocket.receive(recv_packet);
String msg = new String(receivedata, Charset.forName("UTF-8"));
System.out.println("[" + recv_packet.getSocketAddress() + "]: " + msg);
中的println()调用打印但编辑器无法打印unicode字符可以解释它。但是,当服务器将此字符串(msg)发送回客户端时,“???”正在发送而不是原始字符串。
我在做什么错?我如何防止字符的这种转换?
您显示的用于发送和接收的代码是正确的。问题必须在其他地方,比如在用来在屏幕上显示字符串的代码中。 – Joni
将您的编辑器和System.out设置为UTF-8字符编码,然后重试。 – Nayuki
如果我的代码是正确的,为什么我会看到“???”在wireshark中的响应数据包?数据本身可以在什么点被操纵? –