Response输出字符流(中文乱码问题及解决办法)

news/2024/7/3 0:30:05

目录

  • 代码
  • 中文乱码原因
  • 解决办法
    • 1. 获取流对象之前,设置流的编码,由默认编码ISO-8859-1设置为GBK
    • 2.告诉浏览器,服务器发送的消息体数据的编码。建议浏览器使用该编码解码
    • 3.更简便的方法(重点)
  • 最终代码

代码

  • 步骤
    1. 获取字符输出流PrintWriter writer = resp.getWriter();
    2. 输出数据writer.write("你好,中国!");writer.write("hello China!");
@WebServlet("/responseDemo3")
public class ResponseDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取字符输出流
        PrintWriter writer = resp.getWriter();
        //输出数据
        writer.write("你好,中国!");
        writer.write("hello China!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

访问http://localhost:8080/day15/responseDemo3的结果,出现了中文乱码

??????!hello China!
  • 中文乱码原因

    1. 服务器的编码格式(即Tomcat的编码格式)为ISO-8859-1,无法解析中文
    2. 浏览器的编码格式为GBK,与服务器的编码格式不同

解决办法

1. 获取流对象之前,设置流的编码,由默认编码ISO-8859-1设置为GBK

resp.setCharacterEncoding("GBK");

结果:虽然解决了中文乱码的上诉两个问题,但是如果浏览器的编码格式为utf-8,则不能解决第二条问题

  • 假如浏览器的编码格式为utf-8,依然如上设置,就会出现如下结果
浣犲ソ锛屼腑鍥�!hello China!

2.告诉浏览器,服务器发送的消息体数据的编码。建议浏览器使用该编码解码

resp.setHeader("content-type","text/html;charset=utf-8");

此方法就是设置响应头content-type的值为text/html;charset=utf-8

3.更简便的方法(重点)

直接设置响应头content-type的值为text/html;charset=utf-8

resp.setContentType("text/html;charset=utf-8");

最终代码

@WebServlet("/responseDemo3")
public class ResponseDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取流对象之前,设置流的编码,由默认编码ISO-8859-1设置为GBK
        //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("你好,中国!");
        writer.write("hello China!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}


http://lihuaxi.xjx100.cn/news/1023813.html

相关文章

java审计-RCE审计

RCE 漏洞的定义及原理 RCE 的中文名称是远程命令执行,指的是攻击者通过Web 端或客户端提交执行命令,由于服务器端没有针对执行函数做过滤或服务端存在逻辑漏洞,导致在没有指定绝对路径的情况下就可以执行命令。 RCE 漏洞的原理其实也很简单&…

2022年下半年系统集成项目管理工程师案例分析真题及答案解析

2022年下半年系统集成项目管理工程师案例分析真题及答案解析 试题一(18分) 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

8.Java面向对象---类、属性和方法

Java面向对象—类、属性和方法 在生活中,说到类,可以联想到类别,同类,会想到一类人,一类事物等等。而这一类人或事物都是具有相同特征或特点和行为的,我们根据不同的特征或特点和行为将他们归类或分类。同…

Python json详解

一、抓取文本数据 结构化数据:json,xml(极其的稀少) 。直接转化为python类型 非结构化数据:HTML,字符串。正则表达式、xpath 二、JSON简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式, 它使得人们…

【swagger使用详解】『CSDN精选』java如何集成swagger进行接口测试【博主亲测有效】

【写在前面】对于我前端开发出身的写接口并测试的话,我还是更喜欢用swagger,主要它那种界面用起来比较的舒服,当然很多人还是习惯性的用post进行测试,接下来我就来和大家说说怎么将swagger引入到你的项目中去。及swagger该如何使用。 涉及知识…

[Linux]破解原系统、安装新系统

​⭐作者介绍:大二本科网络工程专业在读,持续学习Java,输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:Linux基础操作。本文主要是分享一些Linux系统常用操作,内容主要来源是学校作业,分享出来的…

4月Google Play政策更新,游戏上架需要注意这几点

3月21日,据路透社报道,由于发现国内某知名电商应用存在恶意软件问题,谷歌已暂时将该APP从商店下架,并表示:将该APP下架是一种安全预防措施,已经下载的用户也会收到警告,提示他们进行卸载。 4月…

Prometheus监控Spring Cloud Gateway

📚概述 API网关作为应用服务与外部交互的入口,通过对API网关的监控,可以清晰的知道应用整体的请求量,以便根据不同的并发情况进行扩容处理。 对API网关的监控也是相当必要的。 通过Prometheus监控Gateway与监控普通Springboot项目…