java - 网络上的希伯来字符作为问号收到

时间:2016-02-25 18:14:08

标签: java unicode udp

以下是该方案: 我有一个简单的客户端和服务器Java程序。 客户端将希伯来语字符串发送到服务器:א以空格分隔。

发送数据报的客户端代码:

DatagramPacket packet = new DatagramPacket(msg.getBytes("UTF-8"), msg.getBytes("UTF-8").length);
packet.setSocketAddress(targetSock);
this.sock.send(packet);

msg的类型为String,它包含希伯来字符(来自android的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)发送回客户端时,“????”正在发送而不是原始字符串。

我做错了什么?如何防止这种字符转换?

2 个答案:

答案 0 :(得分:0)

尝试通过CMD通过java发送字符,看看它是否有效。例如,运行java println(HEBREW CHAR),查看它是否通过那里。它可能是服务器解释它的问题。

答案 1 :(得分:0)

我有这样的问题,所以我做了一个“dictonary”的字母,并使א成为一个ב是b等等,并在将它转换为英语之前做了一些标题,将告诉应用程序,当它读取它需要转变为希伯来语。 例如,אבא这个词现在就是ֱֹֹ!_!ENGLISHaba