关于java的编码问题,个人的一个补充
2005-09-19 23:00
696 查看
java的编码问题,这里特指web方案的问题
一定要随时注意编码的改变情况,一般的都是form,url到request,以及数据库的另种转化操作,这些,在其它网上有能找到不再说了.
我只要用了一个过滤器来完成上述工作
一定要随时注意编码的改变情况,一般的都是form,url到request,以及数据库的另种转化操作,这些,在其它网上有能找到不再说了.
我只要用了一个过滤器来完成上述工作
public class CharacterEncodingFilter implements Filter { /** * The default character encoding to set for requests that pass through * this filter. */ protected String encoding = null;
/** * The filter configuration object we are associated with. If this value * is null, this filter instance is not currently configured. */ protected FilterConfig filterConfig = null;
/** * Should a character encoding specified by the client be ignored? */ protected boolean ignore = true;
public void init(FilterConfig filterConfig) throws javax.servlet.ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); if (value == null) this.ignore = true; else if (value.equalsIgnoreCase("true")) this.ignore = true; else if (value.equalsIgnoreCase("yes")) this.ignore = true; else this.ignore = false;
} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, javax.servlet.ServletException { // Conditionally select and set the character encoding to be used if (request.getCharacterEncoding() == null) { String encoding2 = selectEncoding(request); if (encoding2 != null) request.setCharacterEncoding(encoding2); }
// Pass control on to the next filter chain.doFilter(request, response); } public void destroy() { this.encoding = null; this.filterConfig = null; }
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
在web.xml里
<filter> <filter-name>CharacterEncoding</filter-name> <filter-class>com.rising.common.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncoding</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CharacterEncoding</filter-name> <servlet-name>*.do</servlet-name> </filter-mapping>
...
<url-pattern>*.jsp</url-pattern> 相关url的模式,不再详细解析了
这里还有一个,当里在直接在页面里用
<a href="err.jsp?msg=错误">aaa</a>
这里链接过去是正确的
但在servlet里用response.sendRedirect("err.jsp?msg=错误");就是出现乱码
这个东东花了我好长时间没有搞定,最乱静下心来想想,原因如下:
超级链接方式的中文:[code]<a href="err.jsp?msg=错误">aaa</a>,如者直接在浏览器地址里输入的url信息,最后是能过我的过滤器经过GBK编号后进来request的
而在response.sendRedirect("err.jsp?msg=错误");的中文信息是代码直接进入,并没有通过GBK编码
而在err.jsp页面读err信息时,又用过滤器的GBK解码,故没有相对应,所以出错了.
总结:servlet中直接用response.sendRedirect(url)中url有中文信息,必须要手动编码,这时过滤器并不会给你这里的代码编码的
相关文章推荐
- JAVA学习中,一个关于Object对象转换时对应方法的问题
- Openh323和Windows平台上关于G.723.1编码需要注意的一个问题
- java中关于一个汉字等于几个字节的问题
- 关于Java编码问题
- 一上午搞java编码问题,写了一个将批量文件编码转为UTF-8的小程序(有BUG-.-!)
- Java JSON解析中一个关于双引号的问题
- 关于Java构造方法的一个问题
- 补充一个小问题:关于国嵌视频里面的进程创建例程的小错误
- (转载)一个有趣的问题:关于Java中的Integer
- 关于xml编码问题在VB,PHP,JAVA下的解决方案
- Java面试里关于try,catch,finally,return容易犯错的一个问题
- 关于Java方法参数的个人补充
- 关于用java创建一个.properties文件,程序结果为空的问题
- java初学者关于编码问题,知道这些就够了
- 有关于在Java 类的静态初始化块中创建一个自身实例的问题。
- 用java写关于删除一个字符串的字符以及删除一个字符串与另一个字符串中相同字符的问题
- 一个关于java初始化的问题
- 关于JNI 和JAVA 编码的问题小结
- 关于xml编码问题在VB,PHP,JAVA下的解决方案
- [Java]关于中文编码问题