我的中文文件名是 公司简介.doc
我用的oreilly控件上传的文件 ,文件名传到服务器上都是正常的.数据库中存的也是正常的,格式是UTF-8的.
但是在页面调用时出现中文名被解析成乱码.
type Status reportmessage /Kgms/upload/%E5%85%AC%E5%8F%B8%E7%AE%80%E4%BB%8B.docdescription The requested resource (/Kgms/upload/%E5%85%AC%E5%8F%B8%E7%AE%80%E4%BB%8B.doc) is not available公司简介.doc  变成 E5%85%AC%E5%8F%B8%E7%AE%80%E4%BB%8B.doc
而地址栏却是对的 http://192.168.0.18:8080/Kgms/upload/公司简介.doc问怎么解决中文下载问题啊.

解决方案 »

  1.   

    URLDecoder.decode("E5%85%AC%E5%8F%B8%E7%AE%80%E4%BB%8B.doc","utf8")  就是 “公司简介.doc”
    *************
    *  葵花点穴手  *
    *************
      

  2.   

    我这么写了后还是一样的<a href="<%=request.getContextPath()%>/upload/<%=java.net.URLDecoder.decode( dm.getFilename(),"utf-8")%>" target="_blank"><%=dm.getFilename()%></a>/Kgms/upload/%E6%96%B0.txt
    http://192.168.0.18:8080/Kgms/upload/新.txt
      

  3.   

    你写反了
    应该:<a href="<%=request.getContextPath()%>/upload/<%=dm.getFilename()%>" target="_blank"><%=java.net.URLDecoder.decode( dm.getFilename(),"utf-8")%></a>*************
    *  葵花点穴手  *
    *************
      

  4.   

    按你的说法写了以后
          out.write("<td height=\"30\" align=\"left\" id=aw>&nbsp;<a id=aw href=\"");
          out.print(request.getContextPath());
          out.write("/upload/");      out.print(dm.getFilename());      out.write("\r\n");
          out.write("  \" target=\"_blank\">");      out.print(java.net.URLDecoder.decode( dm.getFilename(),"utf-8"));      out.write("</a></td>\r\n");
    servlet编译出来是这个样子的,说明改动生效,但是,乱码还是一样.
    现在我的情况是,
    我在页面显示的下载连接是中文,点击连接后,地址栏显示的也是中文.但是就是有HTTP Status 404 - /Kgms/upload/%E6%96%B0.txt--------------------------------------------------------------------------------type Status reportmessage /Kgms/upload/%E6%96%B0.txtdescription The requested resource (/Kgms/upload/%E6%96%B0.txt) is not available.
    --------------------------------------------------------------------------------Apache Tomcat/5.0.19错误,是不是浏览器设置问题呢
      

  5.   

    事实上现在是浏览器解析 http://192.168.0.18:8080/Kgms/upload/新.txt 这句话变成了
    http://192.168.0.18:8080/Kgms/upload/%E6%96%B0.txt 而中文文件 新.txt 不能识别 %E6%96%B0.txt
    我看见GOOGLE和百度解析中文在地址栏都是 %CF%C2%D4%D8%B5%C4%C这个样子的东西, 我的中文在地址栏就是 新.txt 中文样子.是不是这个问题引起的呢
      

  6.   

    写一个Servlet专门负责文件下载,要下载的文件名通过表单提交
    文件下载的代码:
    String name="中文文件名";
    FileInputStream is = new FileInputStream(new File(name));
    response.setContentType("application/" + name.substring(dotPos));
    String filename = new String(name.getBytes("GBK"),"ISO_8859_1"); //不这样转换编码,下载到客户端的文件名编码是乱码
    response.setHeader("Content-disposition",
    "attachment; filename=" + filename);
    response.setContentLength(size); java.io.InputStream is = data.getBinaryStream();
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    byte[] bufftmp = new byte[1024];

    try {
    int len = 0;
    while((len=is.read(bufftmp)) > 0){
        response.getOutputStream().write(bufftmp,0,len);
    }
    } catch (Exception e) {
    //用户取消或用户连接断开
    }
      

  7.   

    补充一下:
    中文文件名也可通过URL提交,然后用CalvinKyle(连老天都感动得哭了)的方法解码:URLDecoder.decode("E5%85%AC%E5%8F%B8%E7%AE%80%E4%BB%8B.doc","utf8") 就是 “公司简介.doc”
      

  8.   

    polarman(北极人) 说的很明白了,这类问题最好是用上述方法解决,可以随意起名字
      

  9.   

    String filename = new String(name.getBytes("GBK"),"ISO_8859_1");
      

  10.   

    String filename = new String(name.getBytes("GBK"),"ISO_8859_1");
    是不可以的polarman(北极人) 的方法我没有测试过我这个问题是不是浏览器解析的问题呢,还是TOMCAT解析的问题,我觉得说白了就是 
    E5%85%AC%E5%8F%B8%E7%AE%80%E4%BB%8B.doc 没解析的过来,我被报E5%85%AC%E5%8F%B8%E7%AE%80%E4%BB%8B.doc路进找不到的错误.但是浏览器的地址栏却是 http://192.168.0.18:8080/Kgms/upload/新.txt这样的路径,而百度 GOOGLE的中文为什么都是
    E5%85%AC%E5%8F显示的,我的文件名在浏览器地址栏怎么没有变化.郁闷中,UTF-8问题,大家都常遇到,现在我这边真郁闷啊
      

  11.   

    思考了一天后我已经解决,为了避免以后大家也犯这样的错误,我写下心得UTF8问题主要有  数据库取出或存入显示为乱码
    我这个开发组这个项目中一个同事遇到  数据页面取出都是正常的.但是存入数据库的一刹那,变成  ???.数据库是MYSQL.解决办法是
    不用担心,只要我们运行下面的这几行命令,就能看到正常的中文了! SET character_set_client = gbk; 
    SET character_set_connection = gbk; 
    SET character_set_database = gbk; 
    SET character_set_results = gbk; 
    SET character_set_server = gbk; SET collation_connection = gbk_bin; 
    SET collation_database = gbk_bin; 
    SET collation_server = gbk_bin; 如果你用的是mysql的命令行,则直接输入就好。 
    注意 比如UTF-8,在JAVA中要写成UTF-8,但在Mysql中要写成utf8 浏览器是不会不支持中文的.我们应该意识到这是TOMCAT服务器的问题.如果浏览器不支持中文文件名下载,那么为什么邮箱的附件能收发自如?
    我们发现很多情况下我们想取  add.jsp?name=王生  这样的NAME值,我们用request.getParameter("name");是取不出来的.所以这可能是tomcat服务器不支持中文url设置的方法是 在<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"  URIEncoding="UTF-8">设置URIEncoding="UTF-8"在    <Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443" URIEncoding="UTF-8"> 也设置.这样我们的中文URLK就支持了,能下载中文文件,在一般情况下不需要下载控件了.资源是用来共享的.我全盘托出了.谢谢支持我的人.