【发布时间】:2017-05-04 21:17:22
【问题描述】:
我正在编写一个简单的客户端/服务器程序。基本上,客户端向服务器发送一个查询字符串,服务器也以字符串的形式发回一个答案。服务器是使用基于套接字的 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 机器运行时,没问题。
【问题讨论】:
-
你发送数据的编码是什么?
UTF-8?
标签: java c++ string sockets boost-asio