免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3124 | 回复: 2
打印 上一主题 下一主题

请教中文输入乱码问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-17 17:38 |只看该作者 |倒序浏览
本人新学JSP,遇到一个问题:一个文本输入框 (<input type="text" name="SongTitle" size="30">)
                           一个文件输入框(<input type="file" name="SongFile" size="30">)

在文本框中输入中文,文件输入框中选择一个中文文件名的文件,点击提交后记录的数据都提交到数据库(mysql)中。
结果发现,文本框输入的中文显示乱码,而文件输入框中选择的中文文件名却正常现实。这是为什么?让我这个新学jsp
的人很是费解。请那位大虾指点迷津


ps:本人的工作平台是Linux

论坛徽章:
0
2 [报告]
发表于 2007-08-21 01:15 |只看该作者
1。可能页面 默认字符编码问题;
2。数据库字符编码 设置问题 ;(大半问题可能在这里 )

论坛徽章:
0
3 [报告]
发表于 2007-08-21 17:56 |只看该作者
很久没来CU了,今天就仔细回答一下这个问题吧
请求的提交分为两种:post和get
不过对于表单的处理,运用服务器一般是以ISO8859_1进行传输的(不管页面编码为什么),这样的话就需要在获取数据的地方进行转码,但这样的工作量会非常大,而且不便于维护。
所以常用的解决方法就是加Filter(仅适用于servlet2.3及以上)
在web.xml中注册
    <filter>
        <filter-name>Encodingfilter</filter-name>
        <filter-class>
            com.yumt.web.util.EncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>ignore</param-name>
            <param-value>false</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Encodingfilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


package com.yumt.web.util;

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;
import javax.servlet.http.HttpServletResponse;

/**
* 对web请求内容进行编码,解决乱码问�题
*/

public class EncodingFilter implements Filter {

    protected String encoding;

    protected FilterConfig filterConfig;

    protected boolean ignore;

    public EncodingFilter() {
        encoding = null;
        filterConfig = null;
        ignore = true;
    }

    public void destroy() {
        encoding = null;
        filterConfig = null;
    }

    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {

        if (ignore || req.getCharacterEncoding() == null) {
            String s = selectEncoding(req);
            if (s != null) {
                req.setCharacterEncoding(s);
            }
        }

        HttpServletResponse httpResponse = (HttpServletResponse) res;

        // HTTP 1.1

        httpResponse.setHeader("Cache-Control", "no-cache");
        // HTTP 1.0

        httpResponse.setHeader("Pragma", "no-cache");
        // prevents caching at the proxy server

        httpResponse.setDateHeader("Expires", 0);
        try {
            chain.doFilter(req, res);
        } catch (Exception e) {

        }
    }

    public void init(FilterConfig filterconfig) throws ServletException {
        filterConfig = filterconfig;
        encoding = filterconfig.getInitParameter("encoding");
        String s = filterconfig.getInitParameter("ignore");
        if (s == null) {
            ignore = true;
        } else if (s.equalsIgnoreCase("true")) {
            ignore = true;
        } else if (s.equalsIgnoreCase("yes")) {
            ignore = true;
        } else {
            ignore = false;
        }
    }

    protected String selectEncoding(ServletRequest servletrequest) {
        return encoding;
    }
}



这样的话将对post方式的所有数据进行转码。
但对于get的请求,一般通过设置URIEncoding="XXX"来处理,下班了后面写的简单了些,但已经能处理你的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP