function getJsM() {
var cvar = "中文";
alert("cvar=="+cvar );
document.getElementsByName("cvar")[0].value=cvar ;
}
<input type="text" name="cvar" onclick="getJsM()" value="���">
alert出来没问题是中文,页面上cvar文本框显示也是中文,
可是我右键属性的时候。看到的是乱码,所以我一提交后台也是乱码!我在后台转了很多编码都不行,出来没一种不是乱码的!而且我还要在url传中文真不知道该怎么办啊?
我的文件是utf-8的,我用Eclipse写的,肯定是utf-8没问题,
我的页面上也写了下面的句子啊
<%@ page contentType="text/html; charset=UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
但是还有有中文乱码啊
要在url中传中文的话,在后台取参数的时候,这样取试试,
String cvar = new String(request.getParameter("cvar").getBytes("8859_1"), "utf-8");
测试代码:
网页:cq.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>cq.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head>
<body>
<script type="text/javascript">
function getJsM() {
var cvar = "中文";
alert("cvar=="+cvar );
document.getElementsByName("cvar")[0].value=cvar ;
}
</script>
测试页面. <br>
<form action="/web_chart/index.jsp" method="POST">
<input type="text" name="cvar" onclick="getJsM()" value="���"> <input type="submit" value="提交" />
</form>
</body>
</html>测试的JSP:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>测试</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
输出结果是: <br>
<% request.setCharacterEncoding("UTF-8"); %>
<%=request.getParameter("cvar") %>
</body>
</html>运行时,提交后汉字很正常啊。没有乱码啊。Tomcat 5.5.23+MyEclipse 6.0
<html>
<head><title>标题</title>
<script type="text/javascript">
function getJsM() {
var cvar = "中文";
alert("cvar=="+cvar );
document.getElementsByName("cvar")[0].value=cvar ;
}
</script>
</head>
<body>
<form>
<input type="text" name="cvar" onclick="getJsM()">
</form>
</body>
</html>
我试了一下,在我这里没问题。
public class EncodingFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
chain.doFilter(request,response);
} public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}}
web.xml<filter>
<filter-name>filer</filter-name>
<filter-class>类路径.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filer</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样的我写过啊不行啊!我基本把所有的编码都测试了一次啊 utf8 gb2312 gbk gb8310 8859-1 这些都测试了2.大家测试ok!是不是因为我这里国际化的原因啊。我的写法是<script>
var vChina= '<bean:message key='testChina'/>'; function getJsM() {
document.getElementsByName("cvar")[0].value=vChina;
}
</scirpt>
<input type="text" name="cvar" onclick="getJsM()" value="<%=form.getXXX%>" >
然后提交以后后台request.getParameter("cvar");就是乱码啊!
3.系统本身有过滤器啊!现在
一.文件是用MyEclipse 选择的utf-8格式啊,所以文件肯定是utf-8的。
二.页面写了
<%@ page contentType="text/html; charset=UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
三.也用了过滤器啊
四.是jboss好象容器里不用设置编码!实在不知道怎么办了啊.
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>汗发现filter是gbk的..........................修改成utf-8不乱了啊...
但是我又不能修改filter,然后我自己转了半天也没一个编码能不出乱码的我该怎么办啊?
get方式提交,要修改配置文件中的参数,tomcat下是在server.xml中加一句uriencode=''
用其他编辑工具打开一下,看是不是乱码
如果您从事IT行业一年以上,就不要看了,转载这篇文章是因为讲的很好,我就是看这篇文章彻底弄懂了Java乱码的解决方案。
以下段落时转载内容。
只要掌握了中文乱码问题产生的原因,然后对症下药,就可以顺利地解决这些问题。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。
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()方法也就没有作用了。我们需要在得到请求参数的值后,自己做正确的编码转换。
String name = request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1"),"GBK");
在第一行,调用getParameter()方法得到的字符串name的Unicode值是以ISO-8859-1编码转换而来,调用name.getBytes("ISO-8859-1"),将得到原始的GBK编码值,接着,对new String()的调用将以GBK字符集重新构造字符串的Unicode编码。
为了方便从ISO-8859-1编码到GBK的转换,我们可以编写一个工具方法,如下:
public String toGBK(String str)
throws java.io.UnsupportedEncodingException
{
return new String(str.getBytes("ISO-8859-1"),"GBK");
}
3.在数据库中存储和读取中文数据
对于大多数数据库的JDBC驱动程序,在Java程序和数据库之间传递数据都是以ISO-8859-1为默认编码格式,所以,我们在程序中向数据库存储包含中文的数据时,JDBC驱动程序首先把程序内部的Unicode编码格式的数据转化为ISO-8859-1编码,然后传递到数据库中,加上数据库本身也有字符集,这就是为什么我们常常在数据库中读取中文数据时,读到的是乱码。
要解决上述问题,只需要将数据库默认的编码格式改为GBK或GB2312即可,不同的数据库还提供了另外的方式来处理字符编码转换的问题,读者在实际应用过程中,可针对具体情况再做具体处理,只要理解了编码转换的过程,就能找到问题的所在,进而解决问题。
4.Servlet/JSP在不同语言系统的平台下运行
有时候,我们在中文系统平台下开发的Web应用程序移植到英文系统平台下,在Servlet和JSP中直接书写的中文字符串在输出时,将显示为乱码。这是因为在编译Servlet类或者JSP文件时,如果没有使用-encoding参数指定Java源程序的编码格式,javac会获取本地操作系统默认采用的字符集,以该字符集将Java源程序转换为Unicode编码保存到内存中,然后将源程序编译为字节码文件(字节码文件采用的是UTF-8编码),保存到硬盘上。
在英文平台下,采用的默认编码格式是ISO-8859-1,所以在编译转换后,执行输出时,原先在源文件中书写的中文字符串就变成了乱码。
要解决这个问题,在编译Servlet类的源程序时,可以用-encoding参数指定编码为GBK或GB2312,例如:
javac –encoding GBK HelloServlet.java
对于JSP页面,只要在page指令中用contentType属性或pageEncoding属性指定编码格式为GBK或GB2312,Web容器就可以正确转换和编译JSP文件了。例如:
<%@ page contentType="text/html; charset=GBK" %>
或
<%@ page pageEncoding="GBK" %>
在实际的Web应用中,乱码问题产生的原因多种多样,然而只要我们理解了字符编码的转换过程,仔细地分析乱码产生的原因,找到问题的关键,就能对症下药,解决问题。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xxd851116/archive/2009/06/13/4267044.aspx
后台java.net.URLDecoder.decode(request.getParameter("data"),"utf-8")