环境 :windows 20000 ,jdk1.6,Tomcat 6.0,MyEclipse 6.0jsp:<%@ page contentType="text/html; charset=utf-8" language="java" %>
<html:form action="/list" method="POST">
action:
request.setCharacterEncoding("UTF-8");
String one = request.getParameter("one");
现在接收到的one是乱码,这是为什么啊另外
(
不写:request.setCharacterEncoding("UTF-8");
用:String one = request.getParameter("one");
one = new String(one.getBytes("ISO8859-1"),"utf-8");
正确
)
<html:form action="/list" method="POST">
action:
request.setCharacterEncoding("UTF-8");
String one = request.getParameter("one");
现在接收到的one是乱码,这是为什么啊另外
(
不写:request.setCharacterEncoding("UTF-8");
用:String one = request.getParameter("one");
one = new String(one.getBytes("ISO8859-1"),"utf-8");
正确
)
解决方案 »
- equals()比较字符串出错
- javascript 加密用户名及密码信息问题
- struts2.0上传验证
- 有关webservice哪位高手可以教我??
- 懂java causal analysis tool的朋友请进来一下,谢谢!
- 谢谢元元,百忙中帮我解决log4j问题~~~~~~~~~~~~~
- OpenSessionInViewFilter问题
- jsp:useBean与new一个类在jsp页的作用域的差别是什么?
- 简单问题,高分求助!
- 关于数据库的查询?
- 数据库显示问题!
- Access denied for user 'cl41'@'localhost' (using password: YES)
我以前也有一个这样的例子
当 写one = new String(one.getBytes("ISO8859-1"),"utf-8");
用a手机访问我的手机网站没问题
用b手机就出问题当 不写one = new String(one.getBytes("ISO8859-1"),"utf-8");
用b手机访问我的手机网站没问题
用a手机就出问题
这也和本地的字符编码有关吧。据我所知,在传输数据的时候,尤其是内容出现gbk gb2312 utf-8 这些编码的时候。
默认都会以 iso8859-1来传输。
而设置字符编码的request.setCharacterEncoding("UTF-8"); 有时候是完全不起作用的,至于为什么。没去仔细研究
我想这些所有的数据在传输的时候
多少都和浏览器还有操作系统有关系。
至于什么关系,自己多弄几个实验的看下。就知道了。
譬如 如下的语句是得有的
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">譬如 如下的浏览器也是如此设置的。在浏览器的设置中
internet选项>>高级>>总是以utf-8发送url 也是要勾选上的。。
当使用的解决方案是:
写一个filter,截获所有*.do的请求
在这个filter里设置一下编码方式
request.setCharacterEncoding("gbk");
response.setContentType("text/html; charset=GBK");
这样就解决了。问题出现的原因是你的action类是继承了struts的ActionServlet,而在这个类里面是没有做编码类型设定的。
request.setCharacterEncoding("UTF-8");
还是不管用的原因就不清楚了。
跟我之前遇到的情况很类似。
说错的地方请高手指正 ,呵呵、。
request.setCharacterEncoding("UTF-8");
这一句应该是读取数据的第一个语句才行。如果别的过滤器读取了数据,则你再设置就无效了!你可以
request.gettCharacterEncoding() 看看当前是什么!
String myencode1=request.gettCharacterEncoding()
request.setCharacterEncoding("UTF-8");
String myencode2=request.gettCharacterEncoding()可是myencode1和myencode2都是看不到值地
internet选项>>高级>>总是以utf-8发送url 也是要勾选上的。。
这个是勾上地
下面的代码已经在函数的最上方了
request.setCharacterEncoding("UTF-8");
String one = request.getParameter("one");
internet选项>>高级>>总是以utf-8发送url 也是要勾选上的。。
这个是勾上地
下面的代码已经在函数的最上方了
request.setCharacterEncoding("UTF-8");
String one = request.getParameter("one");
port="8080" ...处添加URIEncoding="UTF-8"。2.编写一个过滤器类CharacterEncodingFilterpackage com.lyb.example;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class CharacterEncodingFilter 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");
chain.doFilter(request,response);
// TODO Auto-generated method stub } public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub }}
3.在web.xml中添加过滤器映射
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>com.lyb.example.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>OK。重新启动Tomcat即可
你说的方法,我实验了,是好用地,
不过,我还不知道,我所问的问题,是怎么会事
to :wpabbs
我是用这种方式提交地;
jsp:javascript:
document.ListForm.action="/zeronetext/list.do?sign=addlist";
document.ListForm.submit();
jsp:
<textarea name="one" cols="50" rows="10" id="one"></textarea>
action:
String one = request.getParameter("one");
1、post提交的数据:
程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping> 这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding);
在 这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使 setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法 就是把这个过滤器尽量靠前放.
2、get提交的数据:
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" /> 加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容.
添加一個Servlet,代碼如下:package com.accp.servlet;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;public class EncodeFilter implements Filter
{ /**
* 销毁方法
* 该方法在Filter被销毁时被容器调用
*/
public void destroy()
{
// TODO 自动生成方法存根 }
/**
* 该方法实现将以iso-8859-1编码的字符串转换成编码为utf-8以支持
* 中文
* @param inStr
* @return
* @throws UnsupportedEncodingException
*/
private String toUTF(String inStr) throws UnsupportedEncodingException
{
String outStr = "";
if(inStr != null)
{
outStr = new String(inStr.getBytes("iso-8859-1"),"utf-8");
}
return outStr;
} /**
* 过滤方法
* 该方法在过滤请求或响应时被调用
* 所有匹配的请求在被发送到服务器前会
* 先"到此一游"
* 所有的响应在被响应到客户端前会
* 先"到此一游"
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chan) throws IOException, ServletException
{
//取得客户端的提交方式
String method = ((HttpServletRequest)request).getMethod();
//判断客户端的提交方式
if(method.equalsIgnoreCase("post"))
{
//设置请求对象支持中文的字符集
request.setCharacterEncoding("utf-8");
}
else
{
//取出客户端提交的所有的参数名,是一个枚举
Enumeration<String> paramNames = request.getParameterNames();
while(paramNames.hasMoreElements())//遍历
{
String name = paramNames.nextElement();//取出每个参数名称
String values[] = request.getParameterValues(name);//根据参数名称取得参数值
if(values != null)//判断参数是否有值
{
if(values.length == 1)//判断参数是否单值
{
//调用toUTF(values[0])方法转换参数值的字符编码
//并将该值以属性的形式藏在request
request.setAttribute(name, toUTF(values[0]));
}
else
{
for(int i=0;i<values.length;i++)
{
//循环依次将每个值调用toUTF(values[0])方法转换参数值的字符编码
values[i] = toUTF(values[i]);
}
//将该值以属性的形式藏在request
request.setAttribute(name, values);
}
}
}
} //设置响应对象的响应模式和支持中文的字符集
response.setContentType("text/html;charset=utf-8");
//调用过滤器链中其他过滤器
chan.doFilter(request, response);
} /**
* 初始化方法
* 该方法在Filter被初始化时被容器调用
*/
public void init(FilterConfig arg0) throws ServletException
{
// TODO 自动生成方法存根 }}然後再將web.xml中加入以下代碼(配置請求的/next使用過濾器): <!-- 定义一个过滤器 -->
<filter>
<!-- 定义一个过滤器的别名 -->
<filter-name>MyFilter</filter-name>
<!-- 该过滤器的类的位置 -->
<filter-class>com.accp.servlet.EncodeFilter</filter-class>
</filter>
<!-- 过滤器映射 -->
<filter-mapping>
<filter-name>MyFilter</filter-name>
<!-- 指定过滤器应该和必须过滤的请求 -->
<url-pattern>/next</url-pattern>
</filter-mapping>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.accp.servlet.LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/next</url-pattern>
</servlet-mapping>
</web-app>
是通过getParameter 获得对应的值,根本没转编码集。one = new String(one.getBytes("ISO8859-1"),"utf-8");
是把获得到的one 转成utf-8 的字符编码集
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException
{
arg0.setCharacterEncoding("gbk");
arg1.setCharacterEncoding("gbk");
arg2.doFilter(arg0, arg1); }在web.xml中:
<filter>
<filter-name>filter</filter-name>
<filter-class>com.filter.Filter</filter-class>
</filter> <filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>