【JavaWeb】web乱码总结

文章目录

  • web乱码问题
  • 一、 HTML乱码
  • 二、 Tomcat控制台乱码
  • 三、 IDEA sout 乱码
  • 四、 请求乱码
    • 4.1 GET请求乱码
      • 1. 分析:
      • 2. 演示:
      • 3. 解决:
    • 4.2 POST请求乱码
      • 1. 分析:
      • 2. 演示:
      • 3. 解决:
  • 五、 响应乱码
    • 1.分析:
    • 2. 演示:
    • 3. 解决:
  • 总结


web乱码问题

乱码问题产生的根本原因:

  1. 数据的编码和解码使用的不是同一个字符集
  2. 使用了不支持某个语言文字的字符集
    1

一、 HTML乱码

设置项目文件的字符集要使用一个支持中文的字符集

  • 查看当前文件的字符集
    utf-8
  • 查看项目字符集 配置
    • Global Encoding 全局字符集
    • Project Encoding 项目字符集
    • Properties Files 属性配置文件字符集设置为UTF-8

1

当前视图文件的字符集通过<meta charset="UTF-8"> 来告知浏览器通过什么字符集来解析当前文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
主页
</body>
</html>

二、 Tomcat控制台乱码

tomcat10tomcat9版本中,
修改 tomcat/conf/logging.properties中,
所有的UTF-8GBK即可
1

三、 IDEA sout 乱码

sout乱码问题,设置JVM加载.class文件时使用UTF-8字符集

  • 设置虚拟机加载.class文件的字符集和编译时使用的字符集一致

1

-Dfile.encoding=UTF-8

四、 请求乱码

4.1 GET请求乱码

1. 分析:

  • GET方式提交参数的方式是将参数放到URL后面,如果使用的不是UTF-8,那么会对参数进行URL编码处理
  • HTML中的<meta charset='字符集'/>影响了GET方式提交参数的URL编码
  • tomcat10/9的URI编码默认为 UTF-8
  • GET方式提交的参数URL编码和tomcat10/9默认的URI编码不一致时,就会出现乱码

2. 演示:

  • 浏览器解析的文档的<meta charset="GBK" />
    1
  • GET方式提交时,会对数据进行URL编码处理 ,是将GBK 转码为 “百分号码”
    1
  • tomcat10默认使用UTF-8URI进行解析,造成前后端使用的字符集不一致,出现乱码
    1

3. 解决:

  • 设置GET方式提交的编码和Tomcat10.1.7的URI默认解析编码一致即可 (推荐)
    1
    1

4.2 POST请求乱码

1. 分析:

  • POST请求将参数放在请求体中进行发送
  • 请求体使用的字符集受到了<meta charset="字符集"/> 的影响
  • Tomcat10.1.7 默认使用UTF-8字符集对请求体进行解析
  • 如果请求体的URL转码和Tomcat的请求体解析编码不一致,就容易出现乱码

2. 演示:

  • POST请求请求体受到了<meta charset="字符集"/> 的影响
    1
  • 请求体中,将GBK数据进行 URL编码
    1
  • 后端默认使用UTF-8解析请求体,出现字符集不一致,导致乱码
    1

3. 解决:

方法一:
请求时,使用UTF-8字符集提交请求体 (推荐)
1

方法二:后端在获取参数前,设置解析请求体使用的字符集和请求发送时使用的字符集一致 (不推荐)
2

五、 响应乱码

1.分析:

  • 在Tomcat10.1.7中,向响应体中放入的数据默认使用了工程编码 UTF-8
  • 浏览器在接收响应信息时,使用了不同的字符集或者是不支持中文的字符集就会出现乱码

2. 演示:

  • 服务端通过response对象向响应体添加数据
    1
  • 浏览器接收数据解析乱码
    1

3. 解决:

通过设置content-type响应头,告诉浏览器以指定的字符集解析响应体(推荐)

resp.setContentType("text/html;charset=UTF-8");
1
1
比较老的Tomcat 两行设置都写。
1


总结

1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/341581.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云风网(www.niech.cn)个人网站搭建(二)服务器域名配置

这里直接采用宝塔服务器运维管理面板来进行配置&#xff0c;简单无脑 宝塔 Linux面板8.0.5安装脚本 //Centos安装脚本 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec //Ubuntu/Deepi…

docker运行redis,jdk,nginx

Redis 1.查询redis [rootlocalhost ~]# docker search redis NAME DESCRIPTION STARS OFFICIAL redis Redis is an open source key-value store that… 12620 …

k8s---包管理器helm

内容预知 目录 内容预知 helm相关知识 Helm的简介与了解 helm的三个重要概念 helm的安装和使用 将软件包拖入master01上 使用 helm 安装 Chart 对chart的基本使用 查看chart信息 安装chart 对chart的基本管理 helm自定义模板 在镜像仓库中拉取chart&#xff0c;查…

矿泉水硝酸盐超标污染的解决办法

硝酸盐污染对饮用水资源的威胁日益严重&#xff0c;对公共健康和环境造成潜在风险。本文从硝酸盐污染的成因、健康影响、现行去除技术以及综合管理策略等方面进行全面分析&#xff0c;旨在为饮用水安全领域的研究和实践提供参考。 一、硝酸盐污染的成因与影响 成因&#xff1…

深度学习(4)--Keras安装

目录 Keras安装: 1.1.安装CUDA/cuDDN工具包 1.1.1.安装前准备 1.1.2.安装CUDA 1.1.3.安装cuDDN 1.2.安装Anaconda 1.3.安装tensorflow框架 1.3.1.使用cmd安装 1.3.2.使用Anaconda Prompt安装 1.4.安装Keras框架 1.5.打开jupyter notebook&#xff0c;执行import调用 Keras…

Mysql运维篇(二) 主从复制

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人,如有侵权请留言,我及时删除。 一、主从复制的原理 主库会生成一个I/O操作线程进去写的的操作,而从库则生成两个线程,其一是I/O读取线程,其二是一个SQL线程。 1、主库将数据的操作记录到一个二进…

numpy 多项式拟合函数polyfit的使用

import numpy as np def fit(x,y,m,w):if len(x)<m:return Falsexishu np.polyfit(x,y,m,ww)p np.poly1d(xishu) # 构造多项式yfit p(x) # 拟合的y值yresid y - yfit # 残差SSresid sum(pow(yresid, 2)) # 残差平方和SStotal len(y) * np.var(y) # 总体平均方差if SSt…

强化学习:MuJoCo机器人强化学习仿真入门

声明&#xff1a;我们跳过mujoco环境的搭建&#xff0c;搭建环境不难&#xff0c;可自行百度 下面开始进入正题&#xff08;需要有一定的python基础与xml基础&#xff09;&#xff1a; 下面进入到建立机器人模型的部分&#xff1a; 需要先介绍URDF模型文件和导出MJCF格式 介绍完…

Android 集成百度人脸采集

app端使用活体检测&#xff0c;通过活体检测后&#xff0c;采集人像&#xff0c;base64格式&#xff0c;调接口后台判断人脸对比结果返回给app 1.官网地址&#xff1a; 人脸识别_人脸检测_人脸对比_人脸搜索_活体检测_百度智能云 (baidu.com) 里面有详细的集成步骤和说明 ​…

[设计模式Java实现附plantuml源码~创建型] 产品族的创建——抽象工厂模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

k8s-helm

Helm: 什么是helm,在没有这个heml之前&#xff0c;deployment service ingress的作用就是通过打包的方式&#xff0c;把deployment service ingress这些打包在一块&#xff0c;一键式的部署服务&#xff0c;类似于yum 官方提供的一个类似于安全仓库的功能&#xff0c;可以实现…

【ARMv8M Cortex-M33 系列 7 -- RA4M2 移植 RT-Thread 问题总结】

请阅读【嵌入式开发学习必备专栏 】 文章目录 问题小结栈未对齐 经过几天的调试&#xff0c;成功将rt-thead 移植到 RA4M2&#xff08;Cortex-M33 核&#xff09;上&#xff0c;thread 和 shell 命令已经都成功支持。 问题小结 在完成 rt-thread 代码 Makefile 编译系统搭建…

.NET Core使用SkiaSharp快速生成二维码( 真正跨平台方案)

前言 在.NET 6之前我们一直是使用QRCoder来生成二维码&#xff08;QRCoder是一个非常强大的生成二维码的组件&#xff0c;用到了System.Drawing.Common 包&#xff09;&#xff0c;然后从.NET 6开始&#xff0c;当为非 Windows 操作系统编译引用代码时&#xff0c;平台分析器会…

TS学习笔记八:命名空间

本节介绍命名空间相关内容&#xff0c;包括命名空间的作用、实现方式、注意事项、命名空间和模块的区别等内容。 由于全局作用域下&#xff0c;有可能会导致命名冲突&#xff0c;使用命名空间之后就可以通过命名空间组织代码&#xff0c;将代码封装到不同的命名空间当中&#x…

GPTBots:利用FlowBot中的卡片和表单信息,提供丰富的客服体验

在当今的数字化时代&#xff0c;客户服务的形式和体验正在经历着前所未有的变革。传统的文字消息方式已经无法满足现代用户对于服务体验的多元化需求。那么&#xff0c;如何才能在这个信息爆炸的时代&#xff0c;让我们的服务方式更加个性化、多样化&#xff0c;从而提供更丰富…

MySQL-查询SQL语句

阅读目录 1.基础查询2.高级多表查询 回到顶部 1.基础查询 范围查询 在范围in select 字段 from 表名 where 字段 in (值,值); select id from stu where id in (2,3); 不在范围not in select 字段 from 表名 where 字段 in (值,值); select id from stu where id not in…

【RabbitMQ】RabbitMQ安装与使用详解以及Spring集成

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《RabbitMQ实战》。&#x1f3af;&#x1f3af; &am…

JVM实战篇:GC调优

目录 一.GC调优的核心指标 1.1吞吐量&#xff08;Throughput&#xff09; 1.2延迟&#xff08;Latency&#xff09; 1.3内存使用量 二.GC调优的方法 2.1监控工具 Jstat工具 VisualVm插件 Prometheus Grafana 2.2诊断原因 GC日志 GC Viewer GCeasy 2.3常见的GC模…

从零学算法78

78.给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[],[1],[2],[1,2],[3…

分布式websocket即时通信(IM)系统保证消息可靠性【第八期】

b站上面本期视频版本&#xff0c;观看视频食用更佳&#xff01;点击即可跳转,找不到视频可以直接搜索我 目前叫 呆呆呆呆梦 目前已经写的文章有。并且有对应视频版本。 git项目地址 【IM即时通信系统&#xff08;企聊聊&#xff09;】点击可跳转 sprinboot单体项目升级成sprin…