首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 50分挑战JSP上传表单信息到MySQL后乱码解决方案!~(在线等!....)
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:23:03 楼主
    我写了一个上传文件的例子,用JSP写的。
    addRecord.jsp 和 saved.jsp 两个页面。
    其中addRecord.jsp 是表单页面;saved.jsp 是与数据库连接&显示结果的页面。
    问题:从addRecord.jsp提交到saved.jsp的表单信息还是中文的,到了数据库中却变成乱码了!~









    代码不打算贴在这里了,代码长了也没人看。需要看的朋友我一会把文件的链接地址给你。

    事先声明:你的方法要是下面的几种解决方案,请你不要再发与我的重复的了!~
    用过的解决方案:

    1. <%@page contentType="text/html;Charset=gb2312"%>    失败!~

    2. <%@page contentType="text/html;Charset=gbk"%>       严重问题.即使把用的那个数据库的字符编码改成gbk也不行。

    3.在saved.jsp加入request.setCharacterEncoding("gb2312");  失败!~  

    4.在saved.jsp和addRecord.jsp都加入
         <%@page pageEncoding="GBK"%>   
        <%@page contentType="text/html;charset=GBK"%>        失败!~
    5.修改MySQL配置文件my.ini
      [client]
      default-character-set=gb2312
      port=3306

      [mysql]

      default-character-set=gb2312

      [mysqld]
      default-character-set=gb2312   同时在建数据库时设置数据库编码及其那两个JSP页面都改成gb2312   失败!~

    6.String test = new String(request.getParameter("test").getBytes("ISO-8859-1"),"GBK");  报错!~因为我的表单里有文件上传的内容( <form action="saved.jsp" method=post enctype="multipart/form-data">)。文件上传的MIME字符编码与ISO-8859-1冲突!~

    期待大家的好消息!~

    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:26:551楼 得分:0
    不知道你的数据库链接的URL中是否设置了编码?
    jdbc:mysql://localhost:3306/testdb?autoReconnect=true&amp;jdbcCompliantTruncation=false&amp;useUnicode=true&amp;characterEncoding=GB2312
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:28:542楼 得分:0
    关于乱码问题的解决其实很简单,只要注意一下几个地方:
    1、页面上设置正确编码
    2、建立Filter设置数据提交时的正确编码
    3、数据库链接的URL中设置正确编码

    上面三个地方应该可以解决大部分问题了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:29:253楼 得分:0
    我的这样写的:String uri="jdbc:mysql://localhost:3306/imgdb?useUnicode=true&characterEncoding=gb2312";
    我试试你的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:32:104楼 得分:0
    建议你将mysql数据库本身的编码格式设置为utf-8
    这样的话应该可以解决
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:33:145楼 得分:0
    加上jdbc:mysql://localhost:3306/testdb?autoReconnect=true&amp;jdbcCompliantTruncation=false&amp;useUnicode=true&amp;characterEncoding=GB2312乱码依旧。
    建立Filter设置数据提交时的正确编码?大哥能否说详细点? 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:34:326楼 得分:0
    另外页面上的编码格式也设为utf-8
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:35:347楼 得分:0
    引用 4 楼 burningice44 的回复:
    建议你将mysql数据库本身的编码格式设置为utf-8 
    这样的话应该可以解决


    不好意思!~这种方案也不行。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:36:418楼 得分:0
    在装mysql数据库的时候有一项让你选数据库的编码格式
    不知道你注意过没
    另外即使装好了,有个选项应该也可以改
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:37:499楼 得分:0
    6楼的兄弟,建议你看下我的博客里转载的文章《关于汉字编码》http://blog.csdn.net/tdy218/archive/2008/04/02/2245839.aspx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:38:1710楼 得分:0
    Filter技术的应用
            http://www.j2medev.com/Article/Class10/j2eeweb/200508/563.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:43:5211楼 得分:0
    引用 8 楼 burningice44 的回复:
    在装mysql数据库的时候有一项让你选数据库的编码格式 
    不知道你注意过没 
    另外即使装好了,有个选项应该也可以改


    呵呵!~我当然知道了。即使安装的时候没有选择字符编码。也可以修改my.ini文件,然后重启一下服务就可以了。
    可问题不是出在这里!~
    我的数据库里创建的表里可以显示中文的!~只是这会儿我把它删了。等会我再建个表,写个简单的例子让你看。真的可以显示
    中文。就这一个例子特殊。看见表单页面里有这一句了吗?
    <form action="saved.jsp" method=post enctype="multipart/form-data">
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:43:5712楼 得分:0
    楼主你博客上写的好复杂啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:45:3013楼 得分:0
    如果你能从页面上看到你写入数据库的汉字,那证明就没有问题。
    应该检查一下MySQL的这个客户端软件在显示中文内容上是否有问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:49:2814楼 得分:0
    呵呵  这个软件也没问题!~这个软件我用了好久了!~
    等会我写好那个显示中文的例子后。
    把用这个软件的显示结果和用MySQL自带的客户端里看到的结果都给截图下来,给大家看下。
    两种方式查看的结果肯定是一样的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 11:55:0815楼 得分:0
    接分 应该是传输过程中字符没设置好
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 12:28:3716楼 得分:0
    我刚写了个例子(把原来的addRecord.jsp和saved.jsp修改了一下,去掉了文件上传的功能),寸进数据库中还是中文的!~


    我的数据库没问题吧?管理MySQL的那个软件也是没问题的!~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 13:22:0617楼 得分:0
    网络数据传输是通过ISO8859-1实现的
    tomcat接收到要对其解码 
    tomcat给了一个例子SetCharacterEncodingFilter
    你可以到网上找找详细的说明
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 13:39:2218楼 得分:0
    引用 16 楼 tdy218 的回复:
    我刚写了个例子(把原来的addRecord.jsp和saved.jsp修改了一下,去掉了文件上传的功能),寸进数据库中还是中文的!~ 
     

    我的数据库没问题吧?管理MySQL的那个软件也是没问题的!~


    如果只是去掉了文件上传功能,就可以保存成功了,那就证明是文件上传的组件引起的问题。你用的是什么上传组件?它可能对HttpServletRequest重新做了封装。我以前使用jspsmartupload时遇到过这个问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 13:46:1619楼 得分:0
    在获取参数时不能直接使用request.getParameter(String),要使用封装(request)以后的类的方法获取参数值,然后在获取参数值时进行字符编码的转化。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 14:11:4420楼 得分:0
    同意 mydeman 的 。。

    你用了什么上传组件?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 14:19:4521楼 得分:0
    从数据库读取出来以后再进行一次转码!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 14:20:2222楼 得分:0
    去Mysql安装目录下的my.ini文件里面看看Mysql的编码设置

    一个Client区域一个Server区域,都有个defaultCharacterset,全部改成utf8或者GB2312这样才能存中文
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 14:21:4723楼 得分:0
    http://www.z6688.com/info/44739-1.htm 参考这个看看!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 14:23:3124楼 得分:0
    解决的方法:
    1.写一个Filter的类,在WEB.XML中进行配置.
    2.在发送页面和接受页面都设置编码:request.setCharacterEncoding("GBK");
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 14:36:5325楼 得分:0
    这个也许和你使用的web容器有关 
    若是使用tomcat:
    修改Tomcat中conf下的server.xml解决:
    在server.xml中的 <connector>中添加URIEncoding="gb2312"。添加后的的 <connector>为:
      <Connector port="8080"               maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GB2312"/>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 14:37:1026楼 得分:0
    一般乱码问题可以分这几步去解决,可以教你个方法去查明原因。
    第一,一般编码问题通常的解决方法是这样的。在web.xml中配置filter 那个filter就用tomcat自带的那个,具体你可以去网上找找,这样的文章实在是太多了。
    第二,你程序连接数据库的编码要设置好,建议用utf-8
    第三,你的页面头有没有设置好编码。
    第四,确定你的数据库编码没有问题。


    通常你可以在有问题的代码处设置个断点,看看接受过来的值正常不正常,不正常的话你可以查看你前台有没有设置好相关编码设置,如果正常你再看看你的数据库持久层里编码有没有设置好。一般就这2处问题,搞清楚哪里出问题了,那么接下来解决问题就简单了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 14:39:3527楼 得分:0
    没试过
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 15:00:3428楼 得分:0
    LZ怎么不出现了,莫非已经解决!
    在web.xml里配置一个过滤器
       <filter>
    <filter-name>EncodingFilter </filter-name>
    <filter-class>com.tsinghua.filter.EncodingFilter </filter-class>
    <init-param>
    <param-name>encoding </param-name>
    <param-value>GBK </param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>EncodingFilter </filter-name>
    <url-pattern>/* </url-pattern>
    </filter-mapping> 
    EncodingFilter.java
    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;

    public class EncodingFilter  implements Filter{
        /** 默认的字符编码 */
        protected String encoding = null;
        private FilterConfig config = null;

        public void init(FilterConfig config) throws ServletException {
            this.config = config;
            this.encoding = config.getInitParameter("encoding");
        }
        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain) throws IOException,
            ServletException {
            if (!"ignore".equals(this.encoding)) {
                request.setCharacterEncoding(this.encoding);
            }
            chain.doFilter(request, response);
        }
        
        public void destroy() {
            config = null;
        }
    }
    一般情况下都会解决中文乱码的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 15:04:3029楼 得分:0
    一般情况下我是不建议修改服务器编码参数的,除非你有特殊的用途。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 15:07:5930楼 得分:0
    帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 15:17:4431楼 得分:0
    1.修改mysql.ini 字符格式
    2.修改连接池url   encode
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 16:23:4632楼 得分:0
    我昨天刚遇到这个问题,LZ你尝试一下我的方法(两个步骤):
    一、修改my.ini编码格式,改成和你网页上一样的,如果你网页用的是gb2312则将mysql的my.ini文件的default_character_set设置为default_character_set=gb2312
    二、重新创建数据库,因为你的数据库是在原先的默认编码模式下创建的。这条很关键,我想LZ试过改my.ini文件了,重新创建一下数据库你的数据库才会使用你刚设定的编码格式。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 16:27:5833楼 得分:0
    我以前是重装MYSQL,在倒数第2步选择GB2312格式解决的.  

    已经装了UTF-8就不好解决了.把有用的DBS都导出来,再重装最好解决问题.

    我原来也是改那个.ini文件,重起几次机器也不好用.在公司搞了接近一上午.后来重装选择默认为GB2312格式就解决了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 16:32:4234楼 得分:0
    有Filter  写个过滤器,把编码转成GB2312的,就好用了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-0