效果图:
正常接收到中文的请求是这个样子的:%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(); } } }
喜欢的点个赞❤吧!