zoukankan      html  css  js  c++  java
  • JAVA常见中文问题的解决方法(转)

    JAVA常见中文问题的解决方法

    http://www.java-cn.com/club/article-5876-1.html

    以下解决方案是笔者在日常生活中遇到的,希望能对你解决JAVA中文问题有所帮助。

    1.在jsp页面首部加上<%@page contentType=”text/html;charset=GB2312“%>
    在servlet中使用httpServlerResponse.setContentTpye(“text/html; charset=GB2312”);可以避免一些中文问题

    2.使用JDBC连接mysql数据库时,连接字符串写成如下形式可以避免一些中文问题:
    jdbc://mysql://hostname:port/DBname?user=username&password=pwd&
    useUnicode=true&characterEncoding= iso-8859-1
    如果是以数据源的方式连接数据库在配置文件中使用:
    <parameter>
    <name>url</name>
    <value>jdbc:mysql://hostname:port/DBname? &useUnicode=true&characterEncoding=iso-8859-1</value>
    </parameter>
    注意要使用&替换&符号,否则XML文件在解析的时候会出错。

    3.从数据库读出的数据有可能是乱码,遇到这种问题可以用如下方法解决:
    String desc = rs.getString(“desc”);
    desc = new String(desc.getBytes(“ISO-8859-1”),”GB2312”);

    4.某个页面提交中文内容给Servlet,Servlet要对提交的内容进行转码工作才能正确接收数据,
    通常我们是在servlet中增加以下代码来解决问题。
    httpServlerRequest.setCharacterEncoding(“GB2312”);

    5. 在struts中,对资源文件进行转码,使用JDK字带的转码工具:
    >native2ascii -encoding BG2312 Myresource.properties Myresource_zh.properties

    6.在struts中扩展org.apache.struts.action.RequestProcessor类,并覆写其中的processPreprocess()方法:
    package com.mypro.action;

    public class MyProRequestProcessor extends RequestProcessor
    {
    protected boolean processPreprocess (HttpServletRequest request,
    HttpServletResponse response)
    {
    try
    {
    request.setCharacterEncoding(“GB2312”);
    //other code
    }
    catch(Exception e){}

    return true;
    }
    }
    写完上面代码别忘了修改struts-config.xml:
    <controller processorClass=” com.mypro.action.MyProRequestProcessor”/>

    7. 用filter实现(推荐)
    package com.kefeiannan;

    import java.io.IOException;
    import javax.servlet.*;

    public class SetCharacterEncodingFilter implements Filter
    {

    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;

    public void destroy() {
    this.encoding = null;
    this.filterConfig = null;
    }
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain)
    throws IOException, ServletException {
    if (ignore || (request.getCharacterEncoding() == null)) {
    String encoding = selectEncoding(request);
    if (encoding != null)
    request.setCharacterEncoding(encoding);
    }
    chain.doFilter(request, response);
    }
    public void init(FilterConfig filterConfig) throws 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;
    }
    protected String selectEncoding(ServletRequest request) {
    return (this.encoding);
    }
    }
    配置你站点下的web.xml,在<web-app>后面加上
    <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>com.kefeiannan.SetCharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

  • 相关阅读:
    第二周学习进度总结
    《大道至简》阅读收获及个人总结
    代码层面解释安全性
    2020年大三下学期第二周学习心得
    信息化领域热词分类分析及解释实战
    2020年新型冠状病毒疫情分析实战
    《架构漫谈》个人理解概括
    北京市信件内容爬虫实例——首都之窗
    2020寒假生活学习日记(十五)
    2020寒假生活学习日记(十四)
  • 原文地址:https://www.cnblogs.com/sophine/p/3493790.html
Copyright © 2011-2022 走看看