一文解决IDEA中文乱码问题

news/2024/7/19 16:39:01 标签: intellij-idea, java, servlet, js, tomcat

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:一文解决IDEA中文乱码问题
更多内容点击👇
       JSP连接MySQL数据库

【本文目录】

    • 1、JSP网页页面乱码
    • 2、JSP include 引入文件乱码
    • 3、Java类中导致的网页中文乱码
    • 4、tomcat导致的控制台乱码
    • 5、IDEA导致的控制台乱码

在这里插入图片描述

1、JSP网页页面乱码

在.jsp文件的开头加入:

js"><%@ page contentType=“text/html;charset=UTF-8” language=java%>

2、JSP include 引入文件乱码

【1】运行效果如下(乱码):
在这里插入图片描述
【2】在要引入的文件part.htm中添加:

js"><%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>

如下图:
在这里插入图片描述
源码分享:

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>

<h1>你好,我是html文件!</h1>

在index.jsp中引用了part.html文件如下:
在这里插入图片描述
源码分享:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@include file="part.html"%>

<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  你好
  <% int num=100; %>
  <h1>【include.jsp页面】num=<%=num%></h1>
  <hr><jsp:include page="info.jsp"/>
  </body>
</html>

【3】正确运行效果如下:
在这里插入图片描述

【4】JSP 要经过三个阶段,两次的“编码”:

第一阶段会用 pageEncoding ———> 第二阶段会用 utf-8 至 utf-8 ———> 第三阶段会用 contentType 也就是在客户端浏览器中看到的

第一阶段是 JSP 文件翻译成 Servlet,也就是 .java 文件,这是容器会根据 pageEncoding 的设置读取 jsp 文件, 结果是有指定的编码方法翻译成统一的 UTF-8 的Java源代码,如果 pageEncoding 没有设定或者设定不对,就会出现中文乱码。

第二阶段是 javac 将 java 源代码编译成 java 字节码,不论 JSP 编写时用的什么编码方案,经过这个阶段的结果都是 UTF-8 编码的 java 源代码。javac 使用 UTF-8 的编码读取 java 源代码,编译成 UTF-8 编码的二进制字节码,即 .class 文件,这是 JVM 对常数字符串在二进制内表达的规范。

第三阶段是 Tomcat 或者其他容器载入和执行 java 字节码,输出的结果也就是在客户端浏览器见到的,这个阶段隐藏在第一阶段和第二阶段的 contentType 设定就发挥作用了。

include 指令就是在第一阶段, 即 JSP 页面翻译成 Servlet 时

include 动作发生在第一阶段之前

如果包含文件和被包含文件的编码不一致,在进行编码转换时就可能出现中文乱码

3、Java类中导致的网页中文乱码

中文乱码源码:

java">package cn.lqgx.www;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/hello")
public class HttpServletDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是注解方式的控制台中的HttpServletDemo!");
        resp.getWriter().println("你好!my is HttpServletDemo!注解方式");
    }

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

【1】乱码运行效果如下:
在这里插入图片描述
【2】解决方案:在doGet中应用下面两种方案二选一解决中文乱码问题。

方案一:resp.setContentType(“text/html;charset=UTF-8”);

方案二:resp.setCharacterEncoding(“UTF-8”);

源码分享:

java">package cn.lqgx.www;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/hello")
public class HttpServletDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是注解方式的控制台中的HttpServletDemo!");
        //方法一:
//        resp.setContentType("text/html;charset=UTF-8");
        //方法二:
        resp.setCharacterEncoding("UTF-8");

        resp.getWriter().println("你好!my is HttpServletDemo!注解方式");
    }

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

【3】正确运行效果如下:
在这里插入图片描述

tomcatfont_144">4、tomcat导致的控制台乱码

【1】打开Edit Configurations

在这里插入图片描述

【2】打开Server,在VM options框里加上: -Dfile.encoding=UTF-8

在这里插入图片描述

【3】打开Startup/Connection,添加name:JAVA_TOOL_OPTIONSvalue:-Dfile.encoding=UTF-8,设置完成后,点击OK完成配置。

在这里插入图片描述

5、IDEA导致的控制台乱码

【1】打开File-Settings
在这里插入图片描述
【2】如下图,打开Editor->File Encodings;然后设置3/4中三个位置都是UTF-8
在这里插入图片描述
【3】修改idea安装目录下idea.exe.vmoptions/idea64.exe.vmoptions两个文件,后面加上 -Dfile.encoding=UTF-8,然后重启idea。
在这里插入图片描述


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述


http://www.niftyadmin.cn/n/15051.html

相关文章

SpringMVC的执行流程

文章目录1 初始化阶段2 匹配阶段3 执行阶段我们把整个流程分成三个阶段初始化阶段匹配阶段执行阶段 1 初始化阶段 在 Web 容器第一次用到 DispatcherServlet 的时候&#xff0c;会创建其对象并执行 init 方法 init 方法内会创建 Spring Web 容器&#xff0c;并调用容器 refre…

比羊了个羊还火的ChatGPT,玩法全攻略讲解

大家好&#xff0c;我是洋子&#xff0c;昨天听闻了ChatGPT&#xff0c;真的非常强大&#xff0c;赶紧给大家安利一波 ChatGPT是一种由OpenAI开发的通用聊天机器人模型 该模型是基于GPT-3&#xff08;一种大型语言模型&#xff09;构建的&#xff0c;旨在提供与人类更加自然的…

【Web端智能聊天客服】之HTML、CSS、Bootstrap的讲解及实例(超详细必看 附源码)

觉得有帮助请点赞关注收藏~~~ 一、HTML基础 HTML全称是HyperText Markup Language 是网页的标准标记语言&#xff0c;使用HTML可以创建自定义网站或者模板网站&#xff0c;HTML代表超文本标记语言&#xff0c;主要用于描述网页结构&#xff0c;HTML页面元素体现浏览器如何显示…

p4实现负载均衡

实验要求 基于简单版本的等成本多路径转发实现一种负载平衡。实现的交换机将使用两个表将数据包随机转发到两个目标主机之一第一个表将使用哈希函数&#xff08;应用于由源和目标IP地址、IP协议以及源和目标TCP端口组成的5元组&#xff09;来选择两个主机中的一个第二个表将使…

C语言百日刷题第十二天

前言 今天是刷题第12天&#xff0c;放弃不难&#xff0c;但坚持一定很酷~ 临近期末&#xff0c;刷几套模拟题 C语言百日刷题第十二天前言选择题判断题编程题选择题 1.设a1;b2;c3;d4;则表达式a<b?a:c<d? a:d的结果是____。 A、3 B、1 C、4 D、2 正确选项&#xf…

JAVA EE,一文彻底聊明白

关于JAVA EE的论述&#xff0c;JAVA EE和Spring的论述在第二、三章节。 目录 1.JAVA的发展史 2.JAVA EE 3.JAVA EE和Spring 1.JAVA的发展史 JAVA语言于1995年面世&#xff0c;主要开发者为——James Gosline&#xff0c;后被称为JAVA语言之父。最早该语言叫Oak&#xff0c;…

数据库主从复制,读写分离,分库分表理解 (数据库架构演变)

主从复制 主从复制, 主要是针对MySQL数据库的高可用性, 容灾性上面. 是叫做高可用性? 高可用性可以简单的理解为容灾性, 稳定性, 针对故障&#xff0c;风险情况下的处理, 备案, 策略. 指系统无中断地执行其功能的能力&#xff0c;代表系统的可用性程度 高可用性通常…

斩获三奖 | 国产BI行业唯一获奖,Smartbi荣获36氪、数据猿等多项荣誉

入选36氪新经济之王年度企业近日&#xff0c;36氪WISE2022 新经济之王盛会隆重举行&#xff0c;会上正式发布了“WISE2022 新经济之王年度企业”名册&#xff0c;思迈特软件成功斩获“WISE2022 新经济之王年度企业”荣誉&#xff0c;成为国产BI行业唯一获奖品牌。据了解&#x…