java的编码问题,这里特指web方案的问题
一定要随时注意编码的改变情况,一般的都是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=错误");就是出现乱码
这个东东花了我好长时间没有搞定,最乱静下心来想想,原因如下:
超级链接方式的中文:<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有中文信息,必须要手动编码,这时过滤器并不会给你这里的代码编码的
分享到:
相关推荐
《AZT_Java编码规范》是一份详尽的文档,旨在指导使用Java语言进行软件开发的过程中遵循一系列标准和最佳实践。该规范覆盖了代码排版、注释撰写、变量命名、编码习惯以及单元测试等方面的内容。遵循这些规则和建议...
方法和实例变量的名称应使用小驼峰式命名(camelCase),第一个单词首字母小写,其余单词首字母大写,如:`myVariableName` 和 `myMethodName`。局部变量的命名规则与实例变量相同。 #### 1.3 常量命名 常量的名称...
### Java编码规范详解 #### 目的 Java编码规范旨在标准化Java程序的编写方式,确保代码的一致性、可读性和可维护性。通过规范化的编码标准,开发团队能够更高效地协作,减少代码错误,提升软件质量。 #### 概述 本...
- 每行只声明一个变量,保持清晰度。 - 初始化时立即赋值,提高代码可读性。 #### 类与接口声明 - 包含权限修饰符、类或接口关键字、名称及可能的继承或实现列表。 ### 语句与符号 #### 语句 - **if-else**、**...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
- 参考《Java编码规范及实践》等相关资料,熟悉JAVA的编码规范。 #### 实验结果分析 ##### Java语言编程规范 **命名规范** - Java命名规则与C++相似,但更加注重清晰性和一致性。例如,包名采用全小写,类名首...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
但可能由于不是一个宿舍的,大家彼此间都不太了解,所以交流中还是存在了一定的问题。 在这次的实训当中我收获颇丰。但仅仅靠这一个月的学习还是远远不够的。所以在以后的学习中我会更加努力,提高自己的能力,让...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...