效果圖:
正常接收到中文的請求是這個樣子的:
%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E5%B0%8F%E8%93%9D%E6%9E%A3%E7%9A%84%E5%8D%9A%E5%AE%A2%EF%BC%81
通過解碼方法: String url_new = java.net.URLDecoder.decode(url, "UTF-8");
解碼後恢複為中文: 歡迎來到小藍棗的部落格!
測試這個請求: 測試代碼如下:
如果需要編碼的話可以使用:
String url_new = java.net.URLEncoder.encode(url, "UTF-8");
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketTest {
public static void main(String[] args) throws IOException {
/*
作用:接收浏覽器的請求并響應
*/
// 建立服務,端口設定為10010
ServerSocket server = new ServerSocket(10010);
while(true) {
// 阻塞式連接配接,當接收請求前保持阻塞
Socket socket_client = server.accept();
// 擷取輸入流
InputStream in_put = socket_client.getInputStream();
// 制作響應封包
StringBuffer response = new StringBuffer();
// 讀取請求内容
BufferedReader input = new BufferedReader(new InputStreamReader(in_put,"GBK"));
String url = input.readLine();
if(url != null) {
String url_new = java.net.URLDecoder.decode(url, "UTF-8");
System.out.println("URLDecoder 解碼前:\n" + url);
System.out.println("\nURLDecoder 解碼後:\n" + url_new);
}
// 響應頭部
String response_head = "HTTP/1.1 200 OK\r\n" +
"Content-type:text/html\r\n\r\n";
// 響應主體
String response_body = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">" + // 解決亂碼問題
"<link rel=\"shortcut icon\" href=\"https://g.csdnimg.cn/static/logo/favicon32.ico\" type=\"image/x-icon\" />" + // 解決二次請求
"<style>body{font-family:\"黑體\"}</style>" +
"歡迎來到小藍棗的部落格<br>" +
"Welcome to xiaolanzao's blog!";
response.append(response_head + response_body);
// 擷取輸出流
OutputStream out_put = socket_client.getOutputStream();
// 将響應資料傳給輸出流
out_put.write(response.toString().getBytes());
// 關閉建立的對象
out_put.close();
in_put.close();
socket_client.close();
}
}
}
喜歡的點個贊❤吧!