Java中解决POST和GET请求的中文乱码问题
jspjava乱码解决
中文乱码总结:1-->响应中的乱码:单个页面中,如果出现中文(注意不是post中文也不是get中文,只是显示中文而已),而且使用的是<%@page contentType="text/html;charset=iso-8859-1"%> 此时显示的中文就是乱码,为什么呢?因为charset=iso-8859-1 是设置http的响应(response)中的编码信息,因为是中文,所以http给浏览器显示的汉字是乱码。
2-->post乱码:两个页面(或多个页面)通过form表单post传值(form的默认提交方式都是GET)时,这里与1不同,为什么呢?因为此时发送了请求有request,而1中没有request只是响应而已。
发送请求的时候,使用的编码默认的是iso-8859-1,意味着只有英文是有效字符,这个限制是因为当初指定http标准的成员都来自英语国家,所以如果使用默认的方式从请求获取数据,中文一定会全部变成乱码。
此时就要加上request.setCharacterEncoding("gbk");有了请求request.setCharacerEncoding("gbk")编码方式和http的响应(response)中的编码信息<%@pagecontentType="text/html;charset=gbk"%>两个都gbk,此时body中的(注意是body,如果是url就会有问题往下看就知道了)中文就不会显示为乱码a---乱码出现的过程是这样的,传的是汉字,发送请求的默认编码是iso-8859-1,此时把汉字按iso-8859-1转码出现问题出现??或莫名的符号,响应的时候位数都打乱了(iso-8859-1和gbk编码位数不一样),虽然<%@pagecontentType="text/html;charset=gbk"%>但还是会出现乱码。
中文参数乱码问题解决方案(精选5篇)
中文参数乱码问题解决方案(精选5篇)第一篇:中文参数乱码问题解决方案问题1:在使用tomcat服务器时,如在跳转路径中传递中文参数会出现乱码现向!如:以和两种方式提交的变量flag在LoginServlet中用request.getParameter(“flag”);时就会出现乱码问题。
解决:在tomcat/conf/servlet.Xml中加入一段代码:debug=“0” connectionTimeout=“20000”disableUploadTimeout=“true” URIEncoding=“true”/>问题2:如果uri中转递的是参数要发送到jsp页面,则必须在接受代码的jsp页面里面还要加入代码:问题3:在jsp页面里的代码修正://如不注明是post方式则默认是get方式问题4:在servlet中的代码修正在doPost方法里面最上面的位置加上如下代码:response.setCharacterEncoding(“gb2312”);request.setCharacterEncoding(“gb2312”);第二篇:struts2 action接收到的参数中文乱码的问题struts2 action接收到的参数中文乱码的问题(2011-06-16 10:55:44)转载标签:分类:技术收藏utf-8 乱码 gb2312 字符集编码方法杂谈中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。
大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码方法),这样转来转去就乱码了^_^。
解决方法如下:1.在struts2里面,最好将所有字符都设成utf-8。
1.1 在jsp页面设定字符编码。
这边有必有说明的是如果是jsp+java bean+servlet 的方案,中文乱码很好解决,统一设成gb2312就可以了。
Java中文乱码问题产生原因分析
Java中文乱码问题产生原因分析在计算机中,只有二进制的数据,不管数据是在内存中,还是在外部存储设备上。
对于我们所看到的字符,也是以二进制数据的形式存在的。
不同字符对应二进制数的规则,就是字符的编码。
字符编码的集合称为字符集。
17.1.1 常用字符集在早期的计算机系统中,使用的字符非常少,这些字符包括26个英文字母、数字符号和一些常用符号(包括控制符号),对这些字符进行编码,用1个字节就足够了(1个字节可以表示28=256种字符)。
然而实际上,表示这些字符,只使用了1个字节的7位,这就是ASCII编码。
1.ASCIIASCII(American Standard Code for Information Interchange,美国信息互换标准代码),是基于常用的英文字符的一套电脑编码系统。
每一个ASCII码与一个8位(bit)二进制数对应。
其最高位是0,相应的十进制数是0~127。
例如,数字字符“0”的编码用十进制数表示就是48。
另有128个扩展的ASCII码,最高位都是1,由一些图形和画线符号组成。
ASCII是现今最通用的单字节编码系统。
ASCII用一个字节来表示字符,最多能够表示256种字符。
随着计算机的普及,许多国家都将本地的语言符号引入到计算机中,扩展了计算机中字符的范围,于是就出现了各种不同的字符集。
2.ISO8859-1因为ASCII码中缺少£、ü和许多书写其他语言所需的字符,为此,可以通过指定128以后的字符来扩展ASCII码。
国际标准组织(ISO)定义了几个不同的字符集,它们是在ASCII码基础上增加了其他语言和地区需要的字符。
其中最常用的是ISO8859-1,通常叫做Latin-1。
Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中0~127的字符与ASCII码相同。
ISO 8859另外定义了14个适用于不同文字的字符集(8859-2到8859-15)。
Javaweb中常见编码乱码问题(一)
Javaweb中常见编码乱码问题(⼀) 最近在看Java web中中⽂编码问题,特此记录下。
本⽂将会介绍常见编码⽅式和Java web中遇到中⽂乱码问题的常见解决⽅法:⼀、常见编码⽅式: 1、ASCII 码 众所周知,这是最简单的编码。
它总共可以表⽰128个字符,0~31是控制字符如换⾏、回车、删 除等,32~126是打印字符,可以通过键盘输⼊并且能够显⽰出来的。
2、ISO-8859-1 它是基于ASCII码基础上扩展的,它总共能表⽰256个字符,涵盖了⼤多数西欧语⾔字符。
详见 该编码不⽀持中⽂,举个中⽂编码栗⼦: 字符串“I am 君⼭”⽤ ISO-8859-1 编码,下⾯是编码结果: 由于ISO-8859-1 是单字节编码且不⽀持中⽂,直接将中⽂字符转成‘3f’, 3f也就是常见的"?"字符 3、GB2312 它是双字节编码,共包含6763个汉字。
4、GBK 汉字内码扩展规范,是基于GB2312上拓展的,加⼊了更多的汉字,能表⽰21003个汉字。
它的编码 是和GB2312兼容的。
也就是说⽤GB2312编码的汉字可以⽤GBK来解码,并且不会乱码。
倒过来就不完 全可以了,因为GB2312描述的汉字⽐GBK少。
5、UTF-16 UTF-16是基于Unicode上定义的,⽤两个字节来表⽰Unicode的转换格式,它采⽤定长的表⽰⽅法, 即不能什么字符都可以⽤两个字节表⽰。
两个字节是16个bit,所以就做UTF-16。
(Unicode 囊括了世界 上所有语⾔,所有语⾔均可通过Unicode来相互翻译,详解) 6、UTF-8 由于UTF-16统⼀采⽤两个字节来表⽰⼀个字符,有很多字符⽤⼀个字节表⽰即可。
所以存储空间放 ⼤了⼀倍,还会增加⽹络传输的流量,所以推出了UTF-8。
UTF-8采⽤了⼀种变长技术,每个编码区域有 不同的字码长度。
通过上⾯介绍和对⽐,对于中⽂字符的处理我想UTF-8是最理想的中⽂编码。
java中文乱码常见解决方式
java中⽂乱码常见解决⽅式说明项⽬出现中⽂乱码现象、常见编码解决⽅法如下。
项⽬乱码项⽬⼯作空间在 Windows -> Prefenrences -> General -> Workspace 中进⾏设置在创建项⽬⼯作空间的时候、优先设置编码,在该⼯作空间下创建的项⽬默认遵循⼯作框架配置项⽬编码在 Project -> Resource中设置创建项⽬的时候、设置编码,则项⽬下⽂件都将会和项⽬统⼀页⾯⽂件编码⽂件右键 Properties -> Resource⽂件头编码⽂件头⼀般是HTML、JSP标签头部添加编码JSP:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>HTML:添加在<head>标签⾥⾯<meta http-equiv="Content-Type" content="text/html; charset=utf-8">编辑器编码设置NotePad++编辑器打开⼀个⽂件时候乱码在 菜单 -> 格式记事本存储时,保存为UTF-8格式服务器乱码SpringMVC在web.xml添加<filter><description>字符集过滤器</description><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><description>字符集编码</description><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>Tomcat编码Tomcat 的 conf/server.conf设置编码、设置为:<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"URIEncoding="UTF-8"redirectPort="8443" />添加:URIEncoding="UTF-8" 属性请求响应编码设置请求、响应编码//设置获取请求的编码request.setCharacterEncoding("utf-8")//设置服务器端的编码response.setCharacterEncoding("utf-8");//通知浏览器服务器发送的数据格式response.setContentType("text/html;charset=utf-8");字符串编码String oldStr = "编码设置";String newStr = new String(oldStr.getBytes(), "UTF-8");System.out.println("UTF-8编码:" + newStr);JDBC 连接指定编码url=jdbc:mysql://127.0.0.1/database?characterEncoding=UTF-8数据库设置编码编码可选:mysql> set character_set_client=utf8;mysql> set character_set_connection=utf8;mysql> set character_set_database=utf8;mysql> set character_set_results=utf8;mysql> set character_set_server=utf8;mysql> set character_set_system=utf8;mysql> set collation_connection=utf8;mysql> set collation_database=utf8;mysql> set collation_server=utf8;数据库表设置编码创建表的时候、指定编码:DEFAULT CHARSET=UTF8;CREATE TABLE `type` (`id` int(10) unsigned NOT NULL auto_increment,`type_name` varchar(50) character set utf8 NOT NULL default '', PRIMARY KEY (`id`)) DEFAULT CHARSET=UTF8;补充如果出现乱码现象、可对应⽂章修改。
10中文乱码问题
Java中文乱码问题的解决方案时间:2011-02-10 16:58:26来源:网络整理作者:未知点击:45次只要掌握了中文乱码问题产生的原因,然后对症下药,就可以顺利地解决这些问题。
下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。
1.以POST方法提交的表单数据中有中文字符由于Web容器默认的编码方式是ISO-8859只要掌握了中文乱码问题产生的原因,然后对症下药,就可以顺利地解决这些问题。
下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。
1.以POST方法提交的表单数据中有中文字符由于Web容器默认的编码方式是ISO-8859-1,在Servlet/JSP程序中,通过请求对象的getParameter()方法得到的字符串是以ISO-8859-1转换而来,这是导致乱码产生的原因之一。
为了避免容器以ISO-8859-1的编码方式返回字符串,对于以POST方法提交的表单数据,可以在获取请求参数值之前,调用request.setCharacterEncoding("GBK"),明确指定请求正文使用的字符编码方式是GBK。
在向浏览器发送中文数据之前,调用response.setContentType ("text/html;charset=GBK"),指定输出内容的编码方式是GBK。
对于JSP页面,在获取请求参数值之前,写上下面的代码:<%request.setCharacterEncoding("GB2312");%>为了指定输出内容的编码格式,设置page指令contentType属性,如下:<%@ page contentType="text/html; charset=GBK" %>在Web容器转换JSP页面后的Servlet类中,会自动添加下面的代码:response.setContentType("text/html; charset=GBK");2.以GET方法提交的表单数据中有中文字符当提交表单采用GET方法时,提交的数据作为查询字符串被附加到URL的末端,发送到服务器,此时在服务器端调用setCharacterEncoding()方法也就没有作用了。
Java各种中文乱码问题的解决(1)get和post请求
作为java程序员,中文的乱码问题会经常碰到。
过去的一个项目,我碰到了各种类型的java乱码问题。
先分享给大家:1:网页Post请求,提交后,显示提交结果,乱码。
首先确定数据库的编码方式。
这里我发现,如果数据库的编码不是UTF-8,Post 请求也可以保证回显正确,但是有一个地方要注意。
如html中:(1)<input type="text" name="num" value="${person.num}"/>这时,value中的num中文会正常显示。
(2)<input type="text" name="num" value="<c:outvalue="${person.num}">"/>这时,value中的Num中文不会显示,显示乱码。
这是因为jstl标签库的原因。
虽然(1)代码可以显示中文,但仍然推荐数据库编码改成UTF-82:网页get请求,提交后,显示乱码。
这个问题就比较复杂了。
解决方法可以分为两步,(我们首先做了第一部,解决了大部分问题,第二步是解决特殊问题)。
我们难免使用get请求提交,如果其中有中文,那么:(1)Tomcat中:找到 server.xml 中的<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />以上方法是在网上找到的,我尝试了,起不到效果,但给了我们启发,我们如下做:URIEncoding="UTF-8"没想到成功了。
java中文乱码解决方法
java中文乱码解决方法1、解决文件中文乱码:1.1、修改文件字符编码:由于不同系统,比如Unix下用GBK格式编辑的文件,在Windows中就会乱码,此时可以使用Notepad++(记事本插件),将文件编码转换为系统默认的utf-8,8为Unicode编码。
1.2、修改系统语言及字符编码:此外,也可以通过改变操作系统的语言及字符编码,这种方法我们可以在控制面板-区域和语言的地方进行修改,再次点击其中的管理,在点击详细设置,这时候就可以看到字符集,将其设置为utf-8。
2、解决程序中文乱码:2.1、使用unicod-8格式编码:在这种情况下,一定要注意程序代码的编码格式,一定要以utf-8格式进行编码,而不是GBK,否则一样会出现乱码。
2.2、设置字符集:有时候,可以在程序中设置语言字符集,例如:response.setContentType("text/html;charset=utf-8");用于普通的JSP页面编码设置,也可以在web.xml中设置characterEncoding3、修改Tomcat的默认编码:可以修改tomcat的server.xml文件,将其默认编码为utf-8,在相应的位置加上URIEncoding="utf-8"。
4、前端乱码解决方法:也可以到浏览器中去修改编码,比如:Firefox浏览器中,可以按Ctrl + U,Chrome可以按Ctrl + U,IE下可以第一个菜单栏中点击View,然后选择Encoding,转换为相应的编码即可。
5、对数据库使用正确的编码:在不同的数据库中当我们有gbk的字符编码的时候,一定要创建数据库时候指定好字符编码,让数据库与整个程序保持一致,如果仅仅程序有编码时,数据库没有则容易出现乱码。
总之,我们在解决Java中文乱码的问题是要以系统- web页面-程序-数据库为关键点进行检查,以确保编码的一致性。
解决中文乱码的几种解决方法(推荐)
解决中⽂乱码的⼏种解决⽅法(推荐)⾸先说明我的特殊情况:1. 前台jsp中,我使⽤的是 form post 请求,设置了 enctype="multipart/form-data" ,页⾯编码格式都是utf-82. 后台中,我使⽤的是commons-fileUpload组件,ServletFileUpload 解析form表单和⽂件,3. 设置 request.setCharacterEncoding("UTF-8");4. 设置了ServletFileUpload .setHeaderEncoding("UTF-8");5.Tomcat 的配置下⾯ server.xml 也已经设置了 URIEncoding="UTF-8";⾄此,按道理所有的格式都匹配上了,前后对应,解析出来的肯定是utf-8,但是经过formfield解析出来后任然是ISO-8859-1格式的编码,enctype="multipart/form-data" 会将数据以2进制的编码格式传递,因此我断定是 ServletFileUpload 解析时出了问题,多番查找,我的问题缺少了⼀步String formFieldValue = fileItem.getString("UTF-8");JSP和Servlet的六种中⽂乱码处理⽅法⼀、表单提交时出现乱码:在进⾏表单提交的时候,经常提交⼀些中⽂,⾃然就避免不了出现中⽂乱码的情况,对于表单来说有两种提交⽅式:get和post提交⽅式。
所以请求的时候便有get请求和post请求。
每种⽅式都有着不同的解决⽅法,之所以出现乱码,原因就在于get 请求时,其传递给服务器的数据是附加在URL地址之后的;⽽post的请求时,其传递给服务器的数据是作为请求体的⼀部分传递给服务器。
如何解决Java中中文乱码问题
如何解决Java中的中文乱码问题?一、中文问题的来源计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。
随着计算机的开展,为了适应世界其它民族的语言〔当然包括我们的汉字〕,人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE编码,在软件运行时,它获得本地支持系统〔多数时间是操作系统〕默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持的格式显示出来。
Java的JDK和JVM即是如此,我这里说的JDK是指国际版的JDK,我们大多数程序员使用的是国际化的JDK版本,以下所有的JDK均指国际化的JDK版本。
我们的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的gb2312、GBK、GBK2K等标准以适应计算机处理的需求。
所以,大局部的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是GBK,GB2312编码格式以正确显示我们的汉字。
如:中文Win2K默认采用的是GBK编码显示,在中文WIN2k中保存文件时默认采用的保存文件的编码格式也是GBK的,即,所有在中文WIN2K中保存的文件它的内部编码默认均采用GBK编码,注意:GBK是在GB2312根底上扩充来的。
1由于Java语言内部采用UNICODE编码,所以在JAVA程序运行时,就存在着一个从UNICODE编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,那么显示出来的汉字就会出是乱码,这就是我们常见的JAVA中文问题。
同时,Java是一个跨平台的编程语言,也即我们编写的程序不仅能在中文windows上运行,也能在中文Linux等系统上运行,同时也要求能在英文等系统上运行〔我们经常看到有人把在中文win2k上编写的JAVA程序,移植到英文Linux上运行〕。
解决中文乱码的问题
protected boolean ignore = true; //在web.xml文件里定义filter时要用到此参数
public void destroy() {
// TODO Auto-generated method stub
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP的中文处理");
%>
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
String encoding = selectEncoding(request);
if (encoding != null)
java中如何解决乱码问题总结
<body>你输入的内容为:<%=str%><br>
<form action="test.jsp" method="post">
请输入中文:<input type="text" name="chStr">
<input type="submit" value="确定">
</head>
<body>你输入的内容为:<%=str%><br>
<form action="test.jsp" method="post">
<a href="test2.jsp?chStr=中文">点击这里提交中文参数</a>
</form>
%>
<html>
<head>
<title>中文Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=gbk">
<meta http-equiv=param content=no-cache>
在没有加任何其他处理之前,用request.getParameter(panamName)获取表单提交中的数据,且表单数据中含有中文时,返回的字符串会出现乱码。出现这种问题的原因是Tomcat的J2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理。
JAVA中文字符编码问题详解
将控制台的字符编码设置为GBK,乱码问题解决。
(这里补充一点:eclipse的控制台编码是继承了workspace的设置的,通常控制台编码里没有GBK的选项而且不能输入。我们可以先在 workspace的编码设置中输入GBK,然后在控制台的设置中就可以看到GBK的选项了,设置好后再把workspace的字符编码设置改回utf- 8就是。)
现在在JSP文件中硬编码出现乱码的机会比较小了,因为大家都用了如eclipse的编辑器,基本上可以自动保证这几个编码设置的正确性。现在更多碰到的是在JSP文件中从其他数据源中读取中文字符所产生的乱码问题。
三、在JSP文件中读取字符文件并在页面中显示,中文字符显示为乱码。
比如,我们在JSP文件中使用以下代码:
可见,我们字符编码转换在第二步时出错了,UTF-8的字符串被当做GBK读入了内存中。
解决这个乱码问题有两种方法,一是把test.txt用GBK保存,则FileInputStream能正确读入中文字符;二是使用InputStreamReader来转换字符编码,如:
InputStreamReader sr = new InputStreamReader(new FileInputStream("D:\\test.txt"),"utf-8");
那么,在eclipse运行带中文字符的JAVA文件,控制台显示了乱码,是在哪一步转换错误呢?我们一步步来分析。
- 保存JAVA文件成UTF-8后,如果再次打开你没有看到乱码,说明这步是正确的。
- 用eclipse本身来编译运行JAVA文件,应该没有问题。
- System.out.println会把内存中正确的UNICODE字符编码成GBK,然后发到eclipse的控制台去。等等,我们看到在Run Configuration对话框的Common标签里,控制台的字符编码被设置成了UTF-8!问题就在这里。System.out.println已经把字符编码成了GBK,而控制台仍然以UTF-8的格式读取字符,自然会出现乱码。
java使用URLDecoder和URLEncoder对中文字符进行编码和解码
java使⽤URLDecoder和URLEncoder对中⽂字符进⾏编码和解码摘要: URLDecoder 和 URLEncoder ⽤于完成普通字符串和 application/x-www-form-urlencoded MIME 字符串之间的相互转换。
在本⽂中,我们以使⽤URLDecoder解决GET请求中⽂乱码问题为场景说明 URLDecoder/URLEncoder 的⽤法,并给出了 application/x-www-form-urlencoded MIME 字符串的编码规则。
⼀. URLDecoder/URLEncoder 使⽤场景概述 URLDecoder 和 URLEncoder ⽤于完成普通字符串和 application/x-www-form-urlencoded MIME 字符串之间的相互转换。
在介绍 application/x-www-form-urlencoded MIME 字符串之前,我们先考虑如下场景,如下图所⽰: 我们知道,在我们向客户端发起请求时,浏览器会根据请求URL⽣成相应的请求报⽂发送给服务器。
在这个过程中,如果我们在浏览器中的地址栏中所输⼊的URL包含中⽂字符时,浏览器⾸先会将这些中⽂字符进⾏编码然后再发送给服务器。
实际上,浏览器会将它们转换为 application/x-www-form-urlencoded MIME 字符串,如下图所⽰: 更确切的,当URL地址⾥包含⾮西欧字符的字符串时,浏览器都会将这些⾮西欧字符串转换成application/x-www-form-urlencoded MIME 字符串。
在开发过程中,我们可能涉及将普通字符串和这种特殊字符串的相关转换,这就需要使⽤URLDecoder 和 URLEncoder类进⾏实现,其中:URLDecoder类包含⼀个decode(String s,String enc)静态⽅法,它可以将application/x-www-form-urlencoded MIME字符串转成普通字符串;URLEncoder类包含⼀个encode(String s,String enc)静态⽅法,它可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串。
参数传递中编码问题
参数传递中编码问题(Get/Post 方式)做 java的web开发有段日子了,有个问题老是困扰着我,就是乱码问题,基本上是网上查找解决方案(网上资料真的很多),都是一大堆的介绍如何解决此类的乱码问题,但是没几个把问题的来龙去脉说清楚的,有时候看了些文章后,以为自己懂了,但是在开发中乱码问题又像鬼魂一样出来吓人,真是头大了!这篇文章是我长时间和乱码做斗争的一些理解的积累,还希望有更多的朋友给出指点和补充。
form有2中方法把数据提交给服务器,get 和post ,分别说下吧。
(一)get 提交1.首先说下客户端(浏览器)的form表单用get 方法是如何将数据编码后提交给服务器端的吧。
对于get 方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:8080/servlet?msg=abc(很常见的一个乱码问题就要出现了,如果url中出现中文或其它特殊字符的话,如:http://localhost:8080 /servlet?msg=杭州,服务器端容易得到乱码),url拼接完成后,浏览器会对url进行URL encode,然后发送给服务器,URL encode 的过程就是把部分url做为字符,按照某种编码方式(如:utf-8,gbk等)编码成二进制的字节码,然后每个字节用一个包含3个字符的字符串 "%xy" 表示,其中xy为该字节的两位十六进制表示形式。
我这里说的可能不清楚,具体介绍可以看下.URLEncoder类的介绍在这里。
了解了 URL encode的过程,我们能看到2个很重要的问题,第一:需要URL encode的字符一般都是非ASCII 的字符(笼统的讲),再通俗的讲就是除了英文字母以外的文字(如:中文,日文等)都要进行URL encode,所以对于我们来说,都是英文字母的url不会出现服务器得到乱码问题,出现乱码都是url里面带了中文或特殊字符造成的;第二:URL encode到底按照那种编码方式对字符编码?这里就是浏览器的事情了,而且不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用GBK,通过设置浏览器也可以使用UTF-8,可能不同的用户就有不同的浏览器设置,也就造成不同的编码方式,所以很多网站的做法都是先把url里面的中文或特殊字符用 javascript做URL encode,然后再拼接url提交数据,也就是替浏览器做了URL encode,好处就是网站可以统一get 方法提交数据的编码方式。
get请求乱码处理方法
get请求乱码处理方法
在进行get请求时,有时会出现乱码的情况,这是因为在传输过程中编码格式不一致而造成的。
下面介绍一些处理方法:
1. 指定编码格式
在get请求中,可以通过在URL中添加参数的方式指定编码格式。
比如,可以在URL末尾添加“?charset=utf-8”,表示使用UTF-8编
码格式。
2. 使用URL编码
在进行get请求时,可以先对参数进行URL编码,然后再将编码后的参数添加到URL中。
这样可以保证参数在传输过程中不会出现乱码。
3. 服务器端解码
如果在客户端无法解决乱码问题,可以在服务器端进行解码操作。
服务器端可以通过设置字符编码过滤器,将请求中的参数进行解码,并将解码后的结果传输给后台程序。
综上所述,处理get请求乱码问题的方法有很多,根据不同的情况可以选择不同的解决方法。
- 1 -。
JAVA中文字符乱码解决详解
JAVA中⽂字符乱码解决详解⾸先要了解JAVA处理字符的原理。
JAVA使⽤UNICODE来存储字符数据,处理字符时通常有三个步骤:– 按指定的字符编码形式,从源输⼊流中读取字符数据– 以UNICODE编码形式将字符数据存储在内存中– 按指定的字符编码形式,将字符数据编码并写⼊⽬的输出流中。
所以JAVA处理字符时总是经过了两次编码转换,⼀次是从指定编码转换为UNICODE编码,⼀次是从UNICODE编码转换为指定编码。
如果在读⼊时⽤错误的形式解码字符,则内存存储的是错误的UNICODE字符。
⽽从最初⽂件中读出的字符数据,到最终在屏幕终端显⽰这些字符,期间经过了应⽤程序的多次转换。
如果中间某次字符处理,⽤错误的编码⽅式解码了从输⼊流读取的字符数据,或⽤错误的编码⽅式将字符写⼊输出流,则下⼀个字符数据的接收者就会编解码出错,从⽽导致最终显⽰乱码。
这⼀点,是我们分析字符编码问题以及解决问题的指导思想。
好,现在我们开始⼀只只的解决这些乱码怪兽。
⼀、在JAVA⽂件中硬编码中⽂字符,在eclipse中运⾏,控制台输出了乱码。
例如,我们在JAVA⽂件中写⼊以下代码:String text = “⼤家好”;System.out.println(text);如果我们是在eclipse⾥编译运⾏,可能看到的结果是类似这样的乱码:。
那么,这是为什么呢?我们先来看看整个字符的转换过程。
1. 在eclipse窗⼝中输⼊中⽂字符,并保存成UTF-8的JAVA⽂件。
这⾥发⽣了多次字符编码转换。
不过因为我们相信eclipse的正确性,所以我们不⽤分析其中的过程,只需要相信保存下的JAVA⽂件确实是UTF-8格式。
2. 在eclipse中编译运⾏此JAVA⽂件。
这⾥有必要详细分析⼀下编译和运⾏时的字符编码转换。
– 编译:我们⽤javac编译JAVA⽂件时,javac不会智能到猜出你所要编译的⽂件是什么编码类型的,所以它需要指定读取⽂件所⽤的编码类型。
java网络爬虫,乱码问题终于完美解决
java⽹络爬⾍,乱码问题终于完美解决第⼀次写爬⾍,被乱码问题困扰两天,试了很多⽅法都不可以,今天随便⼀试,居然好了。
在获取⽹页时创建了⼀个缓冲字节输⼊流,问题就在这个流上,添加标红代码即可BufferedReader in = null;in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));附上代码,以供参考。
1public String sendGet(String url) {2 Writer write = null;3// 定义⼀个字符串⽤来存储⽹页内容4 String result = null;5// 定义⼀个缓冲字符输⼊流6 BufferedReader in = null;7try {8// 将string转成url对象9 URL realUrl = new URL(url);10// 初始化⼀个链接到那个url的连接11 URLConnection connection = realUrl.openConnection();12// 开始实际的连接13 connection.connect();14// 初始化 BufferedReader输⼊流来读取URL的响应15 in = new BufferedReader(new InputStreamReader(16 connection.getInputStream(),"utf-8"));17// ⽤来临时存储抓取到的每⼀⾏的数据18 String line;1920 File file = new File(saveEssayUrl, fileName);21 File file2 = new File(saveEssayUrl);2223if (file2.isDirectory() == false) {24 file2.mkdirs();25try {26 file.createNewFile();27 System.out.println("********************");28 System.out.println("创建" + fileName + "⽂件成功!!");2930 } catch (IOException e) {31 e.printStackTrace();32 }3334 } else {35try {36 file.createNewFile();37 System.out.println("********************");38 System.out.println("创建" + fileName + "⽂件成功!!");39 } catch (IOException e) {40 e.printStackTrace();41 }42 }43 Writer w = new FileWriter(file);4445while ((line = in.readLine()) != null) {46// 遍历抓取到的每⼀⾏并将其存储到result⾥⾯47// line = new String(line.getBytes("utf-8"),"gbk");48 w.write(line);49 w.write("\r\n");50 result += line;51 }52 w.close();53 } catch (Exception e) {54 System.out.println("发送GET请求出现异常!" + e);55 e.printStackTrace();56 }57// 使⽤finally来关闭输⼊流58finally {59try {60if (in != null) {61 in.close();62 }6364 } catch (Exception e2) {65 e2.printStackTrace();66 }67 }68return result;69 }。
SpringBoot接收GET请求中文乱码,项目统一编码UTF-8,第三方回调通知GET请。。。
SpringBoot接收GET请求中⽂乱码,项⽬统⼀编码UTF-8,第三⽅回调通知GET请。
百度各种⽅法都试了,没有⼀点效果,实际上在进controller之前已经乱码了,怎么URLDecoder.decode都没⽤,怎么getBytes修改编码都没有⽤直接针对某个请求做编码处理解决⽅案如下:package com.yctnet.electronicticket.config;import org.apache.catalina.connector.Request;import org.apache.catalina.connector.RequestFacade;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.servlet.*;import java.io.IOException;import ng.reflect.Field;import java.nio.charset.Charset;/*** 针对第三⽅请求我⽅服务器编码格式不⼀致的问题*/@Configurationpublic class GBKFilterConfig {@Beanpublic FilterRegistrationBean gbkFilter() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setDispatcherTypes(DispatcherType.REQUEST);registration.setFilter(new Filter() {@Overridepublic void init(javax.servlet.FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {RequestFacade req = (RequestFacade) request;Class clazz = req.getClass();try {Field field = clazz.getDeclaredField("request");field.setAccessible(true);Request r = (Request) field.get(req);org.apache.coyote.Request p = r.getCoyoteRequest();p.getParameters().setQueryStringCharset(Charset.forName("GBK"));chain.doFilter(request, response);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void destroy() {}});// 针对处理的请求registration.addUrlPatterns("/v1/api/ruipu/notify");registration.addUrlPatterns("/v1/api/diandian/order");registration.setName("gbkFilter");registration.setOrder(Integer.MIN_VALUE);return registration;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解决Java中POST和GET请求的中文乱码问题
当我们通过表单向服务器提交数据时,数据的流向是:浏览器→服务器,服务器→浏览器,如果浏览器端和服务器端所采用的编码方式不一致,就会出现乱码问题。
输入时
POST请求
服务器端获取正常编码格式的字符串
1,首先确保表单所在的页面按照指定的字符集打开
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
2,在服务器端按照这个编码格式解码即可
request.setCharacterEncoding("utf-8");
GET请求
1,使用meta确保表单所在页面按照指定字符集打开
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
2,在服务器端使用如下方式获取参数
String userName = request.getParameter("username");
userName = new String(userName.getBytes("iso-8859-1"),"UTF-8");
输出时
POST请求和GET请求一样,都需要在输出对象调用输出方法之前调用setContentType(String content)方法
response.setContentType("text/html;charset=utf-8");
作用
1,通知容器,在调用out.println方法输出时,使用指定的字符集
2,生成消息头中content-type的值,通知浏览器,服务端返回的数据类型和字符集
注意
在JSP中,<%@page pageEncoding=”UTF-8”%> 该指令只是设置页面本身的编码,这是因为jsp文件与Servlet不同,jsp文件需要由容器来编译,所以需要为其指定编码。
取值时,需要设置指定编码。
<%@page contentType=”text/html;charset=UTF-8”%>
这句话相当于:response.setContentType("text/html;charset=utf-8");。