request、response 中文乱码问题与解决方式

2023-05-16

​request乱码

浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码。

response乱码

服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码。

乱码产生的原因

不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采用的编码格式不一致造成的。以request乱码为例:浏览器向服务器发送请求,因为浏览器与服务器之间的通信实质上是socket流,所以要先将请求参数(字符)转换成字节,也就是编码过程,服务器接收到请求参数后进行解码(字节转字符),然后封装到request对象中。如果客户端的编码与服务器端的解码不统一,就会导致通过request获取到的请求参数的值是乱码。

解决response乱码

服务器发给浏览器的数据默认按照ISO-8859-1编码,浏览器接收到数据后按照默认的字符集进行解码后显示,如果浏览器的默认解码字符集不是ISO-8859-1,就出现乱码。对于response乱码,只需要在服务器端指定一个编码字符集,然后通知浏览器按照这个字符集进行解码就可以了。

有三种方式:

A、设置服务器端的编码
response.setContentType("text/html");
response.setCharacterEncoding("utf-8”);
B、通知浏览器服务器发送的数据格式
response.setContentType("text/html;charset=utf-8”);
C、浏览器使用utf-8进行解码
 注:A、B两种方法必须在response.getWriter()或response被提交之前进行设置,二者会相互覆盖,设置一种即可。
response.setContentType()的作用是使客户端浏览器,区分不同种类的数据,
并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。 
例如:web浏览器就是通过MIME类型来判断文件是GIF图片,通过MIME类型来处理json字符串。 
Tomcat的安装目录\conf\web.xml 中就定义了大量MIME类型 ,可以参考。 
response.setContentType(“text/html; charset=utf-8”); html 
response.setContentType(“text/plain; charset=utf-8”); 文本 
response.setContentType(“text/JavaScript; charset=utf-8”); json数据 
response.setContentType(“application/xml; charset=utf-8”); xml数据

解决request乱码

从浏览器发起的访问方式有三种:在地址栏直接输入URL访问、点击页面中的超链接访问、提交表单访问。第一种访问方式浏览器默认将参数按照utf-8进行编码,后面两种访问方式浏览器将参数按照当前页面的显示编码进行编码。所以对于request乱码,只需要在服务器端设置相应的解码格式即可。由于访问方式不同,浏览器对参数的编码格式也不同,为了方便处理,通过超链接和表单的访问也规定必须是utf-8格式,即显示当前页面的编码也要使用utf-8,这样浏览器将统一使用utf-8对参数进行编码。
A、post方式
post方式属于表单提交,参数存在于请求体中。
request.setCharacterEncoding("utf-8”)
B、get方式
get方式提交的参数会跟在请求行中的uri后边,服务器按照默认的iso-8859-1进行解码,这时候解决乱码有两种办法:
办法一:修改服务器端对uri参数的默认编码
在tomcat的server.xml中,设置元素的属性URIEncoding="UTF-8”即可。(默认没有设置此属性)
例如: 
1、设置元素的属性useBodyEncodingForURI=“true”,意思是请求体和uri使用相同的编码格式。通过设置这两个属性,既可以解决get方式的乱码,又可以解决     post方式的乱码。
2、通过修改server.xml指定服务器对get和post统一按照utf-8解码,要求tomcat管理下的所有web应用都要使用utf-8编码,即所有的jsp、html页面都使用utf-8编码。
Request乱码特例:
一个JSP页面已经设置UTF-8编码,而且使用response.sendRedirect重定向到此JSP页面时,页面中文显示正常,并不会出现乱码。
但是在Servlet中使用request.getRequestDispatcher请求转发到这个页面,页面显示时中文乱码,不知道什么原因。

现在有两种解决办法:
一、在Servlet的get或post方法中使用response.setCharacterEncoding("UTF-8");

二、在Servlet的get或post方法中把getWriter()方法注释掉就没有乱码了
//PrintWriter out = response.getWriter();

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

request、response 中文乱码问题与解决方式 的相关文章

随机推荐

  • Android介绍如何生成keystore 文件并使用

    cmd下 进入到jdk的bin目录 xff0c 这样的话 xff0c android keystore文件就会生成在这个目录下 签名的时候我们需要这个文件 C Program Files Java jdk1 7 0 01 bin gt ke
  • android代码APK混淆

    实际的产品研发中为了防止自己的劳动成果被别人窃取 xff0c 混淆代码能有效防止apk文件被反编译 xff0c 进而查看源代码 说来惭愧 xff0c 作为互联网创业公司的我们也确实对竞品Apk反编译研究过 xff0c 如果Apk混淆之后确实
  • android资源文件混淆

    前面一篇文章我们说过Apk的混淆 xff0c 除了源代码的混淆 xff0c 还有资源文件的混淆 微信推出的apk资源混淆方案 xff0c 该方案的具体原理课参见 xff1a 安装包立减1M 微信Android资源混淆打包工具 微信资源混淆工
  • WebView使用

    https www cnblogs com xunzhi p 6023190 html span class hljs keyword public span span class hljs class span class hljs ke
  • 最新研究:AI已可诊断50种眼疾,1.2秒内确认神经系统疾病

    本文由人工智能观察编译 译者 xff1a Sandy 近年来 xff0c 人工智能技术与医疗健康领域的融合不断加深 xff0c 且在科技巨头与资本巨头积极布局的努力下 xff0c 智能医疗正在不断取得新的突破 而根据 自然医学 xff08
  • stm32 fsmc 功能讲解

    LCD有如下控制线 xff1a CS xff1a Chip Select 片选 xff0c 低电平有效 RS xff1a Register Select 寄存器选择 WR xff1a Write 写信号 xff0c 低电平有效 RD xff
  • go语言基础之面向接口编程示例

    span class token keyword package span main span class token keyword import span span class token punctuation span span c
  • ZynqMP SOC 启动Linux遇到TF卡只读(RO)报错

    如果TF卡作为root启动Linux遇到如下错误 xff1a mmcblk0 mmc0 13ab SE128 115 GiB ro VFS Cannot open root device 34 mmcblk0p2 34 or unknown
  • mmc0: error -84 whilst initialising SD card

    玩zynqMP的板子上的SOC xff0c TF作为root启动petalinux系统 xff0c 碰到如下报错 xff1a error 84 whilst initialising SD card 查询Kernel代码中的sd c也没有看
  • .gradle文件夹下没有gradle.properties

    前言 可直接跳过此段到解决方法 前两天刚配置好Android的环境 xff0c 创建了一个Google的sample 但是在构建的过程中就出了问题 Unable to resolve dependency for 39 app 64 deb
  • eclipse编写web.xml中出现The word '...' is not correctly spelled

    为什么会这样呢 xff1f 因为eclipse中设置了拼写检查 xff0c 解决方法 window gt preferences gt 输入spelling xff0c 将右面的enable spelling checking复选框中的勾去
  • centos vsftpd安装

    1 安装vsftpd yum install vsftpd service vsftpd restart vi etc vsftpd vsftpd conf 配置见最下文 vi etc vsftpd vsftpd conf chroot l
  • 小米2013校园招聘笔试题

    题目 xff1a 一个数组里 xff0c 除了三个数是唯一出现的 xff0c 其余的都出现偶数个 xff0c 找出这三个数中的任一个 比如数组元素为 1 2 4 5 6 4 2 xff0c 只有1 5 6这三个数字是唯一出现的 xff0c
  • 自制Anki选择题模板(支持桌面版/移动版)

    复习面试知识偶然发现了一个小东西 anki xff0c 感觉挺好用就是模板有点少 xff0c 做选择题比较费劲 xff0c 网上找了几个终究不如我心意 xff0c 于是参考前人源码 xff0c 自己改编了一个看起来还不错的版本 这是很久以前
  • VMware Workstation 安装 CentOS 7 虚拟机

    安装步骤 VMware 创建CentOS虚拟机 Jack魏的博客 CSDN博客 https blog csdn net WeiHao0240 article details 100894672 VMware Workstation Pro
  • 基于 HAProxy + Keepalived 搭建 RabbitMQ 高可用集群

    RabbitMQ 集群 通常情况下 xff0c 在集群中我们把每一个服务称之为一个节点 xff0c 在 RabbitMQ 集群中 xff0c 节点类型可以分为两种 xff1a 内存节点 xff1a 元数据存放于内存中 为了重启后能同步数据
  • [CentOS7] Install RabbitMQ Using PackageCloud Yum Repository

    Set up Yum Repository A quick way to set up the repository is to use a Package Cloud provided script It is not a require
  • go语言基础之map的增删改查

    package main span class token function import span span class token string 34 fmt 34 span func span class token function
  • 安卓getSharedPreferences 与 getPreferences 与getDefaultSharedPreferences的区别

    整理了一下getSharedPreferences 与 getPreferences 与 getDefaultSharedPreferences 的区别 xff0c 有需要的朋友可以参考下 1 SharedPreferences 简介 为了
  • request、response 中文乱码问题与解决方式

    request乱码 浏览器向服务器发送的请求参数中包含中文字符 xff0c 服务器获取到的请求参数的值是乱码 response乱码 服务器向浏览器发送的数据包含中文字符 xff0c 浏览器中显示的是乱码 乱码产生的原因 不管是request