这个问题困扰我好几天了,查了大量的资料都没有解决,实在想不出什么办法了。我的环境:我的操作系统:windows xp 5.1编辑环境:netBeans 5.X (捆绑tomcat)JDK:5.X数据库:mysql 5.X设置如下:所有jsp页面都设置的是utf8编码,数据库进出口设置的也都是utf8编码,也就是统一utf8编码,
在从页面获得数据存如数据库的时候,只是做了一步iso-8859-1->utf8,因为result设置的是utf8,
所以没进行转码。
出现的问题:从数据库取出数据和往数据库插入数据都没问题,而且取出数据的时候在当前页面显示也没问题,
但是当把取出的这些数据从当前页面传到下一页面的时候,就出现了不正常。比如说:“技术”这个两个字,
当前页面显示正常,但是传到下一个页面的时候就显示的是”技[]“,其中”技“后面的字显示成了一个方框,
不仅仅是这个字,还有一些其它的字也是显示这样,但是一般都是在末尾出问题。我初步断定是数据丢失,
但是为什么丢失就不知道了,还有,也可能是tomcat的问题,但是自己水平有限解决不了,请各位高手帮忙,
先谢谢了。可能说的有点罗嗦,但是我尽量把问题说的清楚些。

解决方案 »

  1.   

    我查过的资料,也有人遇到过跟我类似的问题,有人说,这个可能是mysql的一个bug,但是我想mysql不会这么低级,这样的问题都考虑不到啊。
      

  2.   

    我的想法是如果只是为了显示中文,你可以在mysql的配置文件my.ini中将默认字符集改一下(我是用的gbk),页面编码也用gbk,这样就不用转码了,但是要把数据库和表重新建一下,试试看。
      

  3.   

    从数据库中取出来后在当前页面显示都正常,如下是当前页面的代码:
     <td><a href="../jsp/showTopic.jsp?id=<%=integer.toString()%>&topic=<%=holdPara.getTopic()%>"><%=holdPara.getTopic()%></a></td>在当前页面生成链接后,点击这个链接,转到下一个页面的时候就出现了问题,但是在地址栏中显示都还是正常的,而到页面用td><%=request.getParameter("topic")%></td>显示就出现一部分汉字显示不正常了。
      

  4.   

    to byzddhz():
     你那个方法我试了的,把页面的编码和显示都设置成gb2312,然后连接数据库使用set names gb2312(跟改my.ini一个效果),但是还是会出现我现在的问题。
      

  5.   

    ...id=encodeURI(<%=integer.toString()%>)...
      

  6.   

    修改成:
    <td><a href="../jsp/showTopic.jsp?id=<%=integer.toString()%>&topic=<%=URLEncoding(holdPara.getTopic())%>"><%=holdPara.getTopic()%></a></td>
    下个页面需要
    URLDecoding(...
      

  7.   

    显示中文还是用GB2312或GBK吧。我这里处理过很多MYSQL下中文乱码的例子。现在解决的方法都是:1、保持开发语言和数据库的字符集一致;2、接收页面传参数的时候都用.getBytes("8859_1")转编码。
      

  8.   

    在代碼的裏面進行讀取傳送的時候,如果有中文因將其強制轉換成gb2312或gbbig5等中文編碼 否則無法識別,會出現亂碼
      

  9.   

    指定utf-8(还是iso-8859_1?)从request获取字节流再转GB2312
      

  10.   

    to vteam(Michael):
    你的那个方法我用了下,编辑通不过,那个方法是java.net.URLEncoder.encode()和java.net.URLDecoder.decode(),编译的时候会出现错误提示:C:\MyWeb\topics\build\generated\src\org\apache\jsp\jsp\index_jsp.java:202: URLEncoder() 可以在 java.net.URLEncoder 中访问 private不知道怎么回事?
      

  11.   

    to nccxl(小猪的狗熊):
     我就是这么做的,java默认的编码格式是utf8,我的数据库的编码格式也都设置的是utf8,从页面获得参数放入数据库的过程中进行一次转码,iso-8859-1->utf8因为result设置的是utf8,所以取出数据不需要进行转码。
      

  12.   

    在接收页面String name=new String(request.getParameter("name").getBytes("iso-8859-1"),gb2312);
    或者把gb2312换成utf-8事实把
      

  13.   

    如果问题只是出现在连接传参的地方的话就是因为tomcat的设置问题。
    server.xml中的connector中有两个属性来指定url的编码,一个是URIEncoding,一个是isBodyContentEncoding(第二个记不清了,可以自己查以下tomcat的文当)。第一个属性用来指定url的编码,第二个属性是个布尔值用来指明url使用和页面一样的编码,如果都不指定默认为iso8859-1.
    你的问题,可以把第一个属性设成utf-8,或者把第二个属性设成true应该就能解决。
      

  14.   

    另一张页接收时,这样子行不行
    String a=new String(request.getParameter("aaa").getBytes("iso-8859-1"),"GB2312");
      

  15.   

    murongqiuye(慕容秋叶) :你那样我试了N次了,不行!
      

  16.   

    参考这里 http://www.jorendorff.com/articles/unicode/Unicode for Programmers (draft)
    by Jason Orendorff, 1 March 2002
    Programmers should understand Unicode becauseIt is one of the cornerstones of software internationalization. 
    The Web is full of Unicode data. 
    XML and HTML are based on Unicode. 
    WinNT-based operating systems use Unicode for all string values internally. 
    This article is a short course on Unicode programming.Contents
    An Introduction to Unicode 
    Encodings  
    Unicode on the Web 
    Unicode in HTML and XML 
    Specifying the Encoding 
    Numeric Character References 
    Unicode in Java 
    Unicode Text in Java Source Code 
    Unicode I/O in Java 
    Encoding and Decoding Java Strings 
    Unicode in Python 
    Unicode Strings in Python 
    Unicode Support in the Python Standard Library 
    Unicode files and Python 
    print and Unicode strings 
    Unicode and Windows Programming 
    Where to Go Next 
      

  17.   

    “还是不行啊,仍然会出现上面的问题,不知道怎么办才好?”
    不知道你是怎么试的?
    关于getBytes调用
    getBytes不能乱调。getBytes把它使用在解决乱码问题的情况是这样的,当一个以某种编码的字符串字节流假设gbk,在转化为字符串时使用了错误的编码方式假设utf-8时就出现了乱码,这时人们调用getBytes("utf-8")时就可以的到原来正确的gbk编码的字节数组,这时在显示的使用gbk将其转化为字符串就不会出问题了。也就是说你必须知道原字节流的编码和使用的错误的编码才能正确解决乱码。
    设了tomcat之后不需要用getBytes。
      

  18.   

    to sansong089(sansong089):首先谢谢你!我已经在tomcat中使用了URLEncoding="utf8",这个已经生效了。为什么生效了呢?因为我之前用的是netBeans自带的tomcat的调试,不设置这个没有问题。 但是当我把整个站点移到另外单独安装的一个tomcat服务器下的时候,如果不改那个设置就会出现乱码,但是改了之后就好了,说明生效了。但是,改了这个之后,仍然出现跟先前一样的错误。
      

  19.   

    你在点击连接的时候 出现的 这个是 tomcat 的问题 url 转发失败
    我在asp.net 中也遇到过 连接挑转有2种1种是从页面(浏览器)跳转一种是从服务器直接跳转你把你的url写全了 如http:// ......
     式一下
      

  20.   

    使用从写,如
    <a href=<%=respones.encodeURL("httpL//....jsp")%> > Click</a>
      

  21.   

    不的方法我试了,不行,但是我的url没有你那样全,一般页面内的文件调用都用的是相对路径,绝对路径我还遇到过。
      

  22.   

    如果tomcat中已经设置了Encoding="utf-8"的话,在接收页面加上
    <%
       request.setCharacterEncoding("utf-8");
    %>
    就可以解决。
    去掉该页其他所有设置编码的程序,就留这个。
      

  23.   

    听人说filter可以解决,但是我想,在filter中不是一样要把字符进行转码吗?不过是可以省很多事情而已,如果转码不对,一样会出问题。
      

  24.   

    是URIEncoding不是URLEncoding不知道是不是拼错了。
    其实我觉着编码问题,根本就不是很难解决的大问题,搞清怎么回事应该很好解决的,因为并不需要写好多复杂的程序,感觉lz有点不求甚解。