2016-02-25 56 views
0

这里是场景: 我有一个简单的客户端和服务器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)发送回客户端时,“???”正在发送而不是原始字符串。

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

+1

您显示的用于发送和接收的代码是正确的。问题必须在其他地方,比如在用来在屏幕上显示字符串的代码中。 – Joni

+0

将您的编辑器和System.out设置为UTF-8字符编码,然后重试。 – Nayuki

+0

如果我的代码是正确的,为什么我会看到“???”在wireshark中的响应数据包?数据本身可以在什么点被操纵? –

回答

0

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

0

我有这样的问题,所以我做了一个字母“dictonary”,并使得א成为b等等,并且在将其转换为英文之前制作了一些头部,该头部会在读取时告诉应用它需要转化回希伯来语。 例如,这个词将是现在ֱֹֹ!!ENGLISHaba