2017-05-04 76 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

相關問題