2017-05-04 95 views
0

我正在编写一个简单的客户端/服务器程序。基本上,客户端向服务器发送一个查询字符串,服务器也以字符串的形式发回一个答案。服务器使用基于套接字的boost/asio库以C++编写。服务器写在一个Linux机器上(Fedora 25)。客户端是用Java编写的。除了当我在Windows机器上安装客户端时,一切都正常,当我注意到查询字符串(中文)在服务器端出现乱码时。客户端也在Linux上时没有这个问题。在客户端和服务器之间传输的汉字字符串乱码

socket = new Socket(host, port); 
BufferedReader in = new BufferedReader(new 
InputStreamReader(socket.getInputStream())); 
PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
out.println(inputStr); 
resultStr = in.readLine(); 

以上是客户端部分的java代码。用于接收查询字符串的服务器的C++代码:

ProcessRequest(asio::streambuf& request){ 
std::string input = to_string(request); 
std::cout << input << std::endl; 
... 

在这里,我注意到,当客户从Windows机器运行时,收到中国查询字符串是所有的垃圾。

同样,当客户端从Linux机器运行时,没有问题。

+1

你在用什么编码发送数据? 'UTF-8'? – Galik

回答

0

你应该选择正确的消息编码。在Java中,它是Charset

+0

感谢您的快速回答。但是当客户端和服务器都在Linux上时,我怎么没有这个问题呢? – JasonF

+0

Windows“Unicode”是UTF-16LE,每个字符是2或4个字节。 Linux使用UTF-8,每个字符在1到4个字节之间。 – kutsyk

相关问题