标题:request.getParameter取textarea中文乱码问题
只看楼主
wplmj
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-5-8
结帖率:0
已结贴  问题点数:20 回复次数:7 
request.getParameter取textarea中文乱码问题
<%@ page language="java" import="java.util.*,java.sql.*" contentType="text/html" pageEncoding="UTF-8"%>
<%-- <%@  page contentType=text/html;charset=gbk" pageEncoding="utf-8" %> --%>
<%-- 定义常用函数 --%>
<%!
//得到一个数据库的连接
Connection getConnection() throws SQLException
{
//定义驱动程序
String DBDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";

//定义连接的数据库
String CONNSTR="jdbc:sqlserver://localhost:1433;DatabaseName=XDCTY";

String userName="sa";
String userPwd="wplmj9*";

try{
   Class.forName(DBDRIVER);
   }
catch(ClassNotFoundException ex)
    {
        ex.printStackTrace(System.err);
    }
   
    //return DriverManager.getConnection(CONNSTR,userName,userPwd);
    return DriverManager.getConnection(CONNSTR,userName,userPwd);
}

//判断一个字符串是否为空
boolean isEmptyString(String str)
{
    return str==null || str.length()==0||str.trim().length()==0;
}

%>
<html>
<head>
    <%-- <meta http-equiv="content-type" content="text/html" pageEncoding="UTF-8"> --%>
    <meta http-equiv="content-type" content="text/html" charset="UTF-8">
    <title>资源宝(自定义查询)</title>
    <style>
    TD,INPUT,SELECT{FONT-SIZE:12px}
    </style>
    <script language="javascript" >
    function checkvalue()
    {
        if(document.forms("main").sql.value.length==0)
        {
            alert("请输入要执行的SQL语句");
            document.fors("main").sql.focus();
            return false;
        }
    }
    </script>
</head>

<body>
<center>
<h1>资源宝(自定义查询) </h1>
<p>
<!-- 显示输入框,供用户输入需要执行的SQL语句 -->
<table width="80%" border="22">
<tr>
    <td>请输入要执行的SQL语句</td>
</tr>
<tr>
    <form name="main" method="post" action="SqlWebBase.jsp"
          onsubmit="return checkvalue();">
    <td>
        <textarea name=sqlA rows=15 cols=100></textarea>
    </td>
    <td valign="middle">
        <input type="submit" value="执行"/>
    </td>
    </form>
</tr>
<tr>
<td>
<a href="http://localhost:8080/ZYB/ZybDate.jsp" target="_blank">资源宝数据展示</a>
</td>
<td>
<a href="http://localhost:8080/ZYB/MAP.jsp" target="_blank">资源宝(地图展示)</a>
</td>
</tr>
</table>
<hr>
<%-- 接收用户的输入,显示查询的结果 --%>
<%
    //获得用户输入的SQL语句——就是下面这两行错误。
    String sql=request.getParameter("sqlA");
    sql=new String(sql.getBytes("ISO-8859-1"),"UTF-8");

    //sql = new String(sql.getBytes("iso-8859-1"),"UTF-8");
//    String sql = (request.getParameter("sqlA"),"UTF-8");

    if(!isEmptyString(sql))
    {
        out.println("您所执行的SQL语句为:"+sql+"<br>");
        Connection conn=null;
        Statement st=null;
        ResultSet rs=null;
        
        try
        {
            conn=getConnection();
            st=conn.createStatement();
        
            if(st.execute(sql))
                {
                    //执行结果为ResultSet()
                    rs=st.getResultSet();
                    
                    //得到ResultSet的列数目
                    ResultSetMetaData rsmd=rs.getMetaData();   ///得到结果集的结构信息,比如字段数、字段名等
                    int nColumnCount=rsmd.getColumnCount();        //返回字段个数
                    out.println("您的查询结果为:<br>");
                    out.println("<table width=\"90%\"border=\"1\">");
                    out.print("<tr>");
                    for(int i=1;i<=nColumnCount;i++)
                    {
                        out.println("<td><b>"+rsmd.getColumnName(i)+"</b></td>");    //getColumnName得到列名
                    }
                    out.println("</tr>");
                    
                    while(rs.next())
                    {
                        out.println("<tr>");
                        for(int i=1;i<=nColumnCount;i++)
                        {
                            out.println("<td>"+rs.getString(i) +"</td>");
                        }
                        out.println("</tr>");
                    }
                    
                }
            else
            {
                //执行结果为正数
                out.println("更新记录的数目为:"+st.getUpdateCount());
            }
            
        }
        catch(SQLException ex)
        {
            out.println(ex);
        }
        finally
        {
            //关闭、释放资源
            try
            {
                if(rs!=null)
                rs.close();   
            }catch(Exception ex){}
            
             try{
                 if(st !=null)
                st.close();
                 }
             catch(Exception ex){}
            
             try{
                 if(conn !=null)
                     conn.close();
                 }
             catch(Exception ex){}
        }
    }
%>

</center>
</body>
</html>





————————本人在server.xml中配置了 URIEncoding="utf-8",如下配置:
<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="utf-8"/>


之前调试是可以的,但今天再用发现request.getParameter取textarea里面的中文时,中文是乱码问题
搜索更多相关主题的帖子: localhost sqlserver import 数据库 中文 
2015-05-08 20:10
wplmj
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-5-8
得分:0 
求高手指点,
昨天还可以,为什么现在不行了,求指导,谢谢
2015-05-08 20:11
wplmj
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-5-8
得分:0 
报错的信息——

HTTP Status 500 - An exception occurred processing JSP page /SqlWebBase.jsp at line 121

type Exception report

message An exception occurred processing JSP page /SqlWebBase.jsp at line 121

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /SqlWebBase.jsp at line 121

118: <%
119:     //鑾峰緱鐢ㄦ埛杈撳叆鐨凷QL璇?彞
120:     String sql=request.getParameter("sqlA");
121:     sql=new String(sql.getBytes("ISO-8859-1"),"UTF-8");
122: /*     byte b[]=sql.getBytes("ISO-8859-1");
123:     sql=new String(b,"UTF-8"); */
124:     //sql = new String(sql.getBytes("iso-8859-1"),"UTF-8");
2015-05-08 20:21
wplmj
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-5-8
得分:0 
2015-05-08 20:24
wplmj
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-5-8
得分:0 
刚调试了下,要先注释掉“sql=new String(sql.getBytes("ISO-8859-1"),"UTF-8");”这句,
待页面出现后再取消上句的注释,即可解析出中文。
为什么不注释掉“sql=new String(sql.getBytes("ISO-8859-1"),"UTF-8");”这句,页面会有上面的报错?
请高手指点?
小妹菜鸟。求指点...
2015-05-08 21:04
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:10 
楼主你发错地方了,你的问题不应该在Javascript版发,应该发到Java版或Jsp版,你的这个问题我帮不了你

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-05-08 22:47
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:10 
是该发到Java版或Jsp
2015-05-08 23:02
wgbs25673578
Rank: 1
来 自:山东淄博
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-9-30
得分:0 
帖子很长时间了   不知道你知道原因了没有

sql=new String(sql.getBytes("ISO-8859-1"),"UTF-8");这句代码是用在get方法上的   你的form表单用的是post方法
2016-03-19 21:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-445026-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069902 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved