客户端和服务器之间传输的中文字符串乱码

时间:2017-05-04 12:40:02

标签: java c++ string sockets boost-asio

我正在编写一个简单的客户端/服务器程序。基本上,客户端将查询字符串发送到服务器,服务器也以字符串的形式发回答案。服务器使用基于套接字的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 个答案:

答案 0 :(得分:0)

您应该为邮件选择正确的编码。在Java中,它是Charset