私は単純なクライアント/サーバープログラムを作成しています。基本的に、クライアントはクエリ文字列をサーバに送り、サーバは文字列の形で回答を返す。サーバは、ソケットベースの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