我正在編寫一個簡單的客戶端/服務器程序。基本上,客戶端向服務器發送一個查詢字符串,服務器也以字符串的形式發回一個答案。服務器使用基於套接字的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'? – Galik