Java 技术篇 - ServerSocket接收http的url请求中包含中文的处理方法,URLDecode与URLEncode,url解码与编码

Posted 挣扎的蓝藻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 技术篇 - ServerSocket接收http的url请求中包含中文的处理方法,URLDecode与URLEncode,url解码与编码相关的知识,希望对你有一定的参考价值。

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

喜欢的点个赞❤吧!

以上是关于Java 技术篇 - ServerSocket接收http的url请求中包含中文的处理方法,URLDecode与URLEncode,url解码与编码的主要内容,如果未能解决你的问题,请参考以下文章

java中用serverSocket类如何向指定IP的客户端发送数据

java大文件断点续传

java大文件断点续传

Java 实例演示-ServerSocket 和 Socket 通信实例

Java网络编程精解之ServerSocket用法详解二

Java网络编程精解之ServerSocket用法详解一