一:form在前台以post方式提交数据:

浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据。数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是请求数据产生乱码的根源。

复制代码 代码如下:

package com.yyz.request;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

//以post方式提交表单

public class RequestDemo extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//请求数据的中文乱码问题

request.setCharacterEncoding("UTF-8");//客户端网页我们控制为UTF-8

String username = request.getParameter("username");

//获取数据正常,输出数据时可以查阅不同码表

response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表

response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开

PrintWriter out = response.getWriter();

out.write(username);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request,response);

}

二:form在前台以get方式提交数据:

get方式提交的数据依然是浏览器用什么码表打开就用什么码表发送。不同的是,以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1。得到(? ?),要解决这个问题,需要拿着(??)反向查ISO8859-1,拿到(98 99)后,再去查正确码表。

复制代码 代码如下:

package com.yyz.request;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

//以get方式提交表单

public class RequestDemo extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//请求数据的中文乱码问题

request.setCharacterEncoding("UTF-8");//以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1

String username = request.getParameter("username");

System.out.println(username);

byte source [] = username.getBytes("iso8859-1");

username = new String (source,"UTF-8");

System.out.println(username);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request,response);

}

}

三:提交数据中文乱码问题总结:

1.如果提交方式为post,想不乱码,只需要设置request对象的编码即可。

注意:客户机数据是以哪种方式提交的,request就应该设成什么编码。

2.如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。

String data = "???????";//乱码字符串

byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据

data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码

//等同于

data = new String (source,"UTF-8");

3.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。

3.1

这种方式并不推荐,因为更改了服务器且并不灵活。

3.2

这么设置后,request的setCharacterEncoding设置什么编码,连接器就用什么编码,虽然比上一种更改灵活,但依然会导致我们的应用程序牢牢依赖于服务器,也不被推荐。

四:最后的最后,提一个小细节:URL地址后面如果跟了中文数据,一定要经过URL编码。表单提交的参数有中文数据,浏览器会自动帮我们编码,但如果是通过链接直接带中文参数,浏览器是不会帮我们编码的,这时想通过上述第二种方式解决中文乱码问题就时灵时不灵了,应该通过URLEncoding.encode(,"UTF-8")先编码。

java get提交中文乱码_java中form以post、get方式提交数据中文乱码问题总结相关推荐

  1. java在创建对象时必须_Java中5种创建对象的方式

    以下是一些在Java中创建对象的方法: 1. 使用new关键字 使用new关键字是创建对象的最基本方法.这是在java中创建对象的最常见方法.几乎99%的对象都是这样创建的.通过使用这个方法,我们可以 ...

  2. java加密常用的方法_java中常用接口对接加密方式

    标签: hmac生成码 /** * * @param message 加密的内容 * @param secret 第三方接口提供的密钥 * @return */ private static Stri ...

  3. JSP中get和post请求方式的区别及乱码解决方法

    JSP中get和post请求方式的区别及乱码解决方法 get提交方式:默认method="get" 和 地址栏.超链接请求方式默认都属于get提交方式 form表单的method属 ...

  4. java处理表单变量_Java自学之SpringMVC:接收表单数据

    学习目的:使用SpringMVC接收表单数据. Part 1 新建一个pojo. package pojo; public class Product { private int id; privat ...

  5. java中判断字符串乱码_java中如何判断字符串是否乱码

    java中如何判断字符串是否乱码 发布时间:2020-06-18 13:43:41 来源:亿速云 阅读:113 作者:鸽子 项目中有一个功能 在IE中GET方式提交会产生乱码 但有两个入口都会走这同一 ...

  6. java图片片识别中文_Java中使用tess4J进行图片文字识别(支持中文)

    Java 版本:建议JDK1.8 使用的软件是tesseractocr3.02,3以后的版本才支持中文, 这个软件需要安装在本地电脑中,安装的过程中全部都按照默认进行安装(以便于Java直接调用) 代 ...

  7. java 异常 中文_Java中所有的运行时异常,带中文解释

    展开全部 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:Negat ...

  8. java部署到服务器乱码_java web项目发布到linux服务器上运行出现乱码

    我们项目的开发是在windows下完成的. 然后导出.sql数据库文件,并导出war包,准备部署到linux下的tomcat服务器上. 部署完成出现中文问题: 问题描述: 1.数据库中原有的数据都能正 ...

  9. 随机数在java 自旋锁的运用_Java 中自旋锁的实现

    Java中初始是使用mutex互斥锁,因为互斥锁是会线程等待挂起,而对获取锁后的操作时间比较短暂的应用场景来说,这样的锁会让竞争锁的线程不停的park,unpark 的操作,这样的系统的调用性能是非常 ...

  10. java用户输入解析_Java中的3种输入方式实现解析

    Java中的3种输入方式实现解析 发布于 2020-8-8| 复制链接 摘记: 这篇文章主要介绍了Java中的3种输入方式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学 ...

最新文章

  1. dell 服务器硬件信息监控OMSA安装
  2. Linux创建jupyter notebook和jupyter lab, windows可远程访问
  3. 数字字符串转化为字母组合的种数
  4. ctf(pwn) canary保护机制讲解 与 解密方法介绍
  5. 适用于openvino 2020.2的yolov5的docker制作
  6. 音视频的采集、编码、封包成 mp4 输出
  7. 几款ReactJS最优秀的UI框架
  8. 幼儿园观察记录的目的和目标_幼儿园教育活动内容实施中的观察与记录有何目的...
  9. asdm 对应 java 版本,asdm不能登录问题;浏览器必须是ie,不能是chrome或者firefox;java的版本,尤其是安全等级和例外需要调整...
  10. 图解大数据技术:从入门到精通系列教程
  11. Python实现简易搜索引擎
  12. XP框架开启debug模式_win10 2004系统如何开启夜间护眼模式的问题
  13. Python入门习题大全——词汇表2
  14. spring boot 源码解析15-spring mvc零配置
  15. 微信小程序快速上手(学习笔记总结)
  16. Linux从零学习记录(四)
  17. Atcoder abc A~E
  18. 傅里叶级数、傅里叶变换、短时傅里叶变换 公式
  19. html之菜单栏设置
  20. 计算机音乐好想你曲谱,好想你简谱

热门文章

  1. python中md5方法返回值_python中的md5加密
  2. python随机生成字符串_Python 生成一段随机字符串的两种写法
  3. python网络数据采集 第二版_Python网络数据采集 第2版(Python Web Scraping 2017) 完整pdf原版...
  4. 史上最简明八皇后问题分析与套路总结
  5. java 十进制与二进制,八进制,十六进制之间的转换
  6. hadoop mapper从源码开始 详解
  7. ICRA2021会议-----SLAM方向汇总
  8. 你的手机浏览器不支持webgle_中国联通回应“逐渐关闭2G、3G网络”:系用户手机不支持...
  9. android拉勾轮播,拉勾网顶部轮播图的实现(一)以及简单闭包的应用
  10. smack android 示例代码,android客户端xmpp smack openfire简单开发实例