2021-10-21 Servlet 响应数据出现乱码

5 篇文章 0 订阅
3 篇文章 0 订阅
该博客探讨了在Servlet中处理响应数据时出现乱码的问题,详细解析了字符输出流与字节输出流的使用,并提供了乱码的常见原因及解决方案。通过设置正确的字符编码,确保服务端和客户端编码一致,可以避免乱码问题。
摘要由CSDN通过智能技术生成

Servlet 响应数据出现乱码

响应数据

  • 字符输出流
  • getWrite() 向客户输出字符
  • 字节输出流
  • getOutputStream() 向客户输出任意内容

字节流

package com.example.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;

/**
 * 响应数据
 * 字符输出流
 * getWrite()  向客户输出字符
 * 字节输出流
 * getOutputStream()   向客户输出任意内容
 * <p>
 * <p>
 * 注:两方法不能同时使用
 */
@WebServlet("/s2")
public class Servlet02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //设置一个响应头
        resp.setHeader("content-type", "text/html");
        /**
         * 字节流
         */
        ServletOutputStream out = resp.getOutputStream();
        out.write("<h1>hello 02</h1>".getBytes(StandardCharsets.UTF_8));
        out.close();
    }
}

  • 字符流
package com.example.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;

/**
 * 响应数据
 * 字符输出流
 * getWrite()  向客户输出字符
 * 字节输出流
 * getOutputStream()   向客户输出任意内容
 * <p>
 * <p>
 * 注:两方法不能同时使用
 */
@WebServlet("/s1")
public class Servlet01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置一个响应头
        resp.setHeader("content-type", "text/html");
        /**
         * 字符流
         */
        PrintWriter writer = resp.getWriter();
        writer.write("<h1>hello 01</h1>");
        writer.close();

    }
}

  • 响应数据出现乱码
package com.example.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * 响应数据出现乱码
 * 乱码原因:
 * 有中文
 * 编码不一致
 * 乱码情况:
 * 1.字符输出流必乱码
 * 2 字节输出流可能乱码
 * 解决方案
 * 1.客户端与服务端一致
 */
@WebServlet("/s3")
public class Servlet03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

      /*  //设置服务端编码格式
        resp.setCharacterEncoding("utf-8");
        //设置客户端编码格式

        resp.setHeader("content-type", "text/html;charset=utf-8");
        //同时设置服务端和客户端的编码格式*/
        resp.setContentType("text/html;charset=utf-8");

        /**
         * 字节流
         */
        ServletOutputStream out = resp.getOutputStream();
        out.write("<h1>你好 02</h1>".getBytes(StandardCharsets.UTF_8));
        out.close();
    }
}

//同时设置服务端和客户端的编码格式*/

package com.example.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;

/**
 * 响应数据出现乱码
 * 乱码原因:
 * 有中文
 * 编码不一致
 * 乱码情况:
 * 1.字符输出流必乱码
 * 2 字节输出流可能乱码
 * 解决方案
 * 1.客户端与服务端一致
 */
@WebServlet("/s4")
public class Servlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

      /*  //设置服务端编码格式
        resp.setCharacterEncoding("utf-8");
        //设置客户端编码格式

        resp.setHeader("content-type", "text/html;charset=utf-8");
        //同时设置服务端和客户端的编码格式*/
        resp.setContentType("text/html;charset=utf-8");

        /**
         * 字符流
         */
        PrintWriter writer = resp.getWriter();
        writer.write("<h1>你好 01</h1>");
        writer.close();
    }
}

* 响应数据出现乱码

  • 乱码原因:
  • 有中文
  • 编码不一致
  • 乱码情况:
  • 1.字符输出流必乱码
  • 2 字节输出流可能乱码

* 解决方案

  • 1.客户端与服务端一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值