java-Socket接受中文亂碼的解決
阿新 • • 發佈:2019-02-15
伺服器傳送一條資料如:
然後客戶端接收:
你會發現這樣寫會是亂碼;
應該寫成isr = new InputStreamReader(server.getInputStream(),"GBK");
這樣就正常顯示了。
在服務端預設的編碼情況下,JAVA的SOCKET接收需要GBK編碼,而C#的接收需要UTF-8編碼
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
out.println("沒有查到該資料。");//向客戶端傳送
out.flush();
然後客戶端接收:
public BufferedReader recieve(){ //從服務端程式接收資料 InputStreamReader isr=null; BufferedReader br=null; try { isr = new InputStreamReader(server.getInputStream());//這裡需要GBK br = new BufferedReader(isr); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return br; } /////////////////////////////////////// BufferedReader br=recieve(); while((message = br.readLine()) != null){ messages+=message; } System.out.println("messages="+messages);
你會發現這樣寫會是亂碼;
應該寫成isr = new InputStreamReader(server.getInputStream(),"GBK");
這樣就正常顯示了。
在服務端預設的編碼情況下,JAVA的SOCKET接收需要GBK編碼,而C#的接收需要UTF-8編碼