【问题标题】:Chinese character strings transmitted between client and server garbled客户端和服务器之间传输的中文字符串乱码
【发布时间】: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


【解决方案1】:

您应该为消息选择正确的编码。在 Java 中是Charset

【讨论】:

  • 感谢您的快速回答。但是为什么客户端和服务器都在Linux上时我没有这个问题?
  • Windows“Unicode”为UTF-16LE,每个字符为2或4字节。 Linux 使用 UTF-8,每个字符在 1 到 4 个字节之间。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
相关资源
最近更新 更多