HT_风清扬 2022-10-07 21:47 采纳率: 100%
浏览 47
已结题

Java简易服务器中文乱码

Java简易服务器中文乱码
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class DemoTCPServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(6667);//构造服务器
while (true) {

        Socket iouse01 = ss.accept();//服务器保持监听状态
        new Thread(new Runnable() {//每加载一次图片创建一个线程
            @Override
            public void run() {
                try {
                    InputStream ips = iouse01.getInputStream();//接收客户端请求的字节流
                    InputStreamReader ipsr = new InputStreamReader(ips);
                    BufferedReader bis = new BufferedReader(ipsr);//将接收的字节流转换为字符流并缓冲

                    //获取客户端请求路径
                    String s = bis.readLine();
                    System.out.println(s);
                    String[] arr = s.split(" ");
                    String htmlpath = arr[1].substring(1);

                    FileInputStream fis = new FileInputStream(htmlpath);//本地字节流读取硬盘字节数据
                    OutputStream ops = iouse01.getOutputStream();//获取网络输出流对象
                    //HTTP固定请求头代码
                    ops.write("HTTP/1.1 200 OK\r\n".getBytes());
                    // 解决方法:正确告诉浏览器发送的内容是什么编码的
                    ops.write("Content-Type:text/html\r\n".getBytes());
                    ops.write("\r\n".getBytes());

                    //读取本地目的文件并输出
                    byte[] bytes = new byte[1024];
                    int len;
                    while ((len = fis.read(bytes)) != -1) {
                        ops.write(bytes, 0, len);
                    }

                    fis.close();
                    iouse01.close();

                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();

    }


}

}

img

使用原始ie浏览器访问我的服务器,遇到中文就返回乱码
我尝试过把浏览器返回的字节码打印出来,中文字节码转为字符打印的是乱码,英文字母正常,
字节流转换字符流之后还是和原来的一样中文乱码
望大能给个解决思路,感谢!!
  • 写回答

3条回答 默认 最新

  • limit、T 2022-10-08 09:40
    关注

    你这个问题的原因是访问的时候浏览器自动进行了url编码。只需要在获取参数的地方进行解码就可以了。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月16日
  • 已采纳回答 10月8日
  • 修改了问题 10月7日
  • 创建了问题 10月7日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装