1. 程式人生 > >java-Socket接受中文亂碼的解決

java-Socket接受中文亂碼的解決

伺服器傳送一條資料如:

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編碼