`

关于java的编码问题,个人的一个补充

阅读更多

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编码规范

    《AZT_Java编码规范》是一份详尽的文档,旨在指导使用Java语言进行软件开发的过程中遵循一系列标准和最佳实践。该规范覆盖了代码排版、注释撰写、变量命名、编码习惯以及单元测试等方面的内容。遵循这些规则和建议...

    JAVA编码规范.

    方法和实例变量的名称应使用小驼峰式命名(camelCase),第一个单词首字母小写,其余单词首字母大写,如:`myVariableName` 和 `myMethodName`。局部变量的命名规则与实例变量相同。 #### 1.3 常量命名 常量的名称...

    java编码规范

    ### Java编码规范详解 #### 目的 Java编码规范旨在标准化Java程序的编写方式,确保代码的一致性、可读性和可维护性。通过规范化的编码标准,开发团队能够更高效地协作,减少代码错误,提升软件质量。 #### 概述 本...

    JAVA编码规范

    - 每行只声明一个变量,保持清晰度。 - 初始化时立即赋值,提高代码可读性。 #### 类与接口声明 - 包含权限修饰符、类或接口关键字、名称及可能的继承或实现列表。 ### 语句与符号 #### 语句 - **if-else**、**...

    java开源包6

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包9

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    集成编程环境与编码规范

    - 参考《Java编码规范及实践》等相关资料,熟悉JAVA的编码规范。 #### 实验结果分析 ##### Java语言编程规范 **命名规范** - Java命名规则与C++相似,但更加注重清晰性和一致性。例如,包名采用全小写,类名首...

    java开源包4

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包101

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包5

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包8

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java实训个人总结.doc

    但可能由于不是一个宿舍的,大家彼此间都不太了解,所以交流中还是存在了一定的问题。 在这次的实训当中我收获颇丰。但仅仅靠这一个月的学习还是远远不够的。所以在以后的学习中我会更加努力,提高自己的能力,让...

    java开源包10

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包3

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包1

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    Java资源包01

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    JAVA上百实例源码以及开源项目源代码

    Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...

    java开源包11

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包2

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

Global site tag (gtag.js) - Google Analytics