2017-05-04 1 views
0

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

どのようなエンコーディングでデータを送信していますか? 'UTF-8'? – Galik

答えて

0

メッセージのエンコードを正しく選択する必要があります。 Javaの場合はCharset

+0

迅速な回答ありがとうございます。しかし、クライアントとサーバーの両方がLinux上にいる場合、どのように問題が起こるのでしょうか? – JasonF

+0

Windows "Unicode"はUTF-16LEで、各文字は2または4バイトです。 LinuxはUTF-8を使用し、各文字は1〜4バイトです。 – kutsyk

関連する問題