『壹』 Ajax使用GET发送中文请求JAVA-Servlet乱码问题
如果在JSP页面以GET方式向Servlet发送请求时,这里在doGet()方法中用 request.getParameter()方法取得参数值是乱码,如果你在调用 request.getParameter()方法之前使用response.setCharacterEncoding("utf-8");这种方式只是对页面发送POST请求有效,哪么如何对发送GET请求有效果呢,这时就需要在Tomcat的server.xml中配置
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8"/> <!-- 指定URI编码格式-->
所以只有指定URI编码格式后页面向Servlet发送GET请求时不会出现中文乱码问题
『贰』 java访问网站GET的数据中文乱码
get方式提交的参数编码,只支持iso8859-1编码。
因此,如果里面有中文。
在后台就需要转换编码,如下
String zhongwen = request.getParameter("zhongwen");
zhongwen = new String(zhongwen.getBytes("iso8859-1"),"GBK");
前提是你页面编码就是GBK,如果是utf-8,那上面那句代码后面就改成utf-8
『叁』 关于java过滤器解决中文乱码的
因为你袭遗漏了重要的一步。正确的方法如下:
if(encoding!=null){
//设置request字符编码
request.setCharacterEncoding(encoding);
//设置response字符编码
response.setContentType("text/html;charset="+encoding);
response.setCharacterEncoding(encoding);
}
//传递给下一个过滤器
chain.doFilter(request,response);
『肆』 javaweb怎么处理中文乱码
1.UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立;
2、web tomcat:默认是ISO8859-1,不支持中文的
3.java.nio.charset.Charset.defaultCharset()获得平台默认字符编码;
4.getBytes() 是通过平台默认字符集进行编码;
二、引入
在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置;而在Servlet中,也会遇到中文乱码问题;
比如:
OutputStream out = response.getOutputStream();
out.write(String );
输出中文时可能会出现乱码;
比如:
[java]view plain
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
OutputStreamout=response.getOutputStream();
Stringdata="博客";
out.write(data.getBytes("UTF-8"));
输出乱码的问题是程序用UTF-8编码,而浏览器默认用GBK解码了,因此会出现乱码;
三、Servlet相关的几种乱码
1、浏览器调用jsp,html等页面中文显示乱码
此情况需满足两个要求:
(1)文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)
(2)浏览器用utf-8解析:
(手动)==> 在浏览器中右键选择编码格式为utf-8
(智能)==> 在文件中写入如:<meta name="content-type" content="text/html; charset=UTF-8"> 通过<meta>标签模拟response头,起到告诉浏览器用utf-8的编码解析
(智能)==>response.setContentType("text/html;charset=UTF-8");起到告诉浏览器用utf-8的编码解析
常用:
<meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">
<%@ pageEncoding="utf-8"%>
<?xml encoding="UTF-8"?>
2、通过浏览器调用servlet,页面显示乱码。
Servlet乱码分为request乱码和response乱码;
(1)response乱码问题
解决方法:
在网上很有效的解决方法是添加:
response.setCharacterEncoding("UTF-8");
解决不了,后来又搜到一条解决方法是:
response.setContentType("text/html;charset=utf-8");或者response.setHeader("content-type","text/html;charset=UTF-8");告诉浏览器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse)
两句都填上,后来终于解决了这个问题;
其实我们应该思考一下本质:
response.setContentType("text/html;charset=UTF-8");目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;
response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器
『伍』 java get方式请求中文乱码求解决
『陆』 java get方式中文乱码
get方式提交的参数编码,只支持iso8859-1编码。
因此,如果里面有中文。
在后台专就需要转换编码,如下
String zhongwen = request.getParameter("zhongwen");
zhongwen = new String(zhongwen.getBytes("iso8859-1"),"GBK");
前提是属你页面编码就是GBK,如果是utf-8,那上面那句代码后面就改成utf-8
『柒』 java中文乱码
前台页面编码和后台都统一了没有,实在不行,url传中文的话,,先用js 编码一下,在java里转回来,js部分:function unicode(str){ return
* str.replace(/[^\u0000-\u00FF]/g,function($0){return<br> * escape($0).replace(/(%u)(\w{4})/gi,\\u$2)}); }java 部分:public static String Unicode2GBK(String inputPara) {
String inWord = "uu";
StringBuffer buffer = new StringBuffer();
if (inputPara != null) {
String result = inputPara.replaceAll(inWord, "\\\\u");
int index = 0;
while (index < result.length()) {
if ("\\".equals(result.substring(index, index + 1))) {
if ("u".equals(result.substring(index + 1, index + 2))) {
String charStr = "";
charStr = result.substring(index + 2, index + 6);
char letter = (char) Integer.parseInt(charStr, 16);
buffer.append(letter);
index += 6;
}
} else {
buffer.append(result.charAt(index));
index++;
}
}
return buffer.toString();
}
return "";
}
『捌』 java 接收get请求带中文乱码,已经更改字符编码 可是不生效
给的信息太少了,,出现乱码有好几多原因。。主要是你请求是传参编码格式、容器格式以及你代码去参是的格式。最好把这些都使用统一的格式。
『玖』 java filter 过滤器中文乱码 怎么解决啊
1、首先编写一个Java类的filter代码。操作步骤:
(1)在myeclipse中新建一个java类,
(2)单击“Add”按钮,在弹出来的对话框中“选择接口”文本框中输入Filter,
并选择匹配好的类型javax.servlet
(3)单击“OK”按钮返回"New Java Class"对话,然后单击“Finish”按钮,就可以看到创建的过滤器框架:
过滤器类:Encoding.java,代码如下:
package com;
import java.io.IOException;
import javax.servlet.*;
public class Encoding implements Filter {
protected String encoding=null;
protected FilterConfig config;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(request.getCharacterEncoding()==null){
//得倒指定的编码
String encode=getEncoding();
if(encode!=null){
//设置request的编码
request.setCharacterEncoding(encode);
response.setCharacterEncoding(encode);
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.config=filterConfig; //得到web.xml中的配置编码
this.encoding=filterConfig.getInitParameter("Encoding");
}
protected String getEncoding(){
return encoding;
}
}
2、在web.xml文件写入以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<filter> <!-- 控制编码 -->
<filter-name>EncodingFilter</filter-name>
<filter-class>com.Encoding</filter-class>
<init-param> <!-- 初始化参数 -->
<param-name>Encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
『拾』 java的get提交中文数据,得到乱码,可为什么乱码大多是问号
举个例子,现在我们都会汉语,有一天一个日本鬼子(客户端请求的数据,拥有和你不同的编码)来了和你(服务端是另一种编码格式)对话。你会想着他会说什么王八蛋之类,但是他却说的八嘎呀路,这时候你就蒙了!用你的语言根本不理解也不知道他说的是什么,所以你的脑海里出现了很多问号代表你解释不了