是UNICODE吧
你得转化
//Native2unicode
public static String convertCNForDisplay(String s) {
if (s == null || s.length() == 0) {
return null;
}
byte[] buffer = new byte[s.length()];
for (int i = 0; i < s.length(); i++) {
buffer[i] = (byte) s.charAt(i);
}
return new String(buffer);
}
//unicode2Native
public static String convertCNToDB(String s) {
if (s == null || s.length() == 0) {
return null;
}
char[] buffer = new char[s.length() * 2];
char c;
int j = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) >= 0x100) {
c = s.charAt(i);
byte[] buf = ("" + c).getBytes();
buffer[j++] = (char) buf[0];
buffer[j++] = (char) buf[1];
} else {
buffer[j++] = s.charAt(i);
}
}
return new String(buffer, 0, j);
}
在网上找的,我就用的这个,很好用的

解决方案 »

  1.   

    不行哎,在tomcat下显示正确,但在apache下还是乱码。是不是apache的配置问题?
      

  2.   

    整合过但没有用过,动态文件是tomcat管理,静态文件是apache管理,你这个是动态的,和apache有关么?
    学习中.....
      

  3.   

    在HTTP头里只能用ASCII码,你的代码应该是这样的:
    我用response.addHeader("Content-Disposition","attachment;filename="+java.net.URLEncoder.encode(filename));
                                        ------------------------------------具体看看java.net.URLEncoder的文挡.
      

  4.   

    我把源文件贴在这儿,请dugang106(冷风细雨)看看有无毛病:<%@page import="com.xdf.web.db.*,java.io.*,com.xdf.web.util.*,java.sql.ResultSet" %>
    <%
      String url=null;
      DBWraper db=new DBWraper();
      ResultSet rs=null;
      int id=0;
      try
      {
       id=Integer.parseInt(request.getParameter("id"));
    try{
       db.executeUpdate("update EWEB_DOWNLOAD set RES_HITS=RES_HITS+1 where RES_ID="+id);
    }   
    catch(Exception e){}
    rs=db.executeQuery("select RES_SOURCE from EWEB_DOWNLOAD where RES_ID="+id);
            if(rs.next())  url=rs.getString(1);  //在这儿取得文件的物理地址
      }
      catch(Exception e){}
      finally
      {
       db.close(rs);
      }try{
            
    int pos=url.lastIndexOf("\\");
    String name=url.substring(pos+1,url.length());
    FileInputStream in=new FileInputStream(Util.getGbString(url));//getGbString用于将iso8859-1转换为gbk
    response.setContentType("application/octet-stream");
    response.addHeader("Content-Disposition","attachment;filename="+name);
    response.resetBuffer();
    OutputStream os=response.getOutputStream();
    int len; 
    byte buf[]=new byte[1024];
    while ((len=in.read(buf,0,buf.length))!=-1)
    {  
       os.write(buf,0,len);
    }
    }
    catch(Exception e)
    {
    response.setContentType("text/html");  
    out.print("<h1>您请求的文件不存在!</h1>");
    e.printStackTrace(new PrintWriter(out));}
    %>比如文件  豪杰视频通2.7.rar
    在tomcat下 显示 豪杰视频通2[1].7.rar
    在apache下 显示 潞脌陆脺脢脫脝碌脥篓2[2].7.rar
      

  5.   

    谢谢大伙。
    用alabaza(一再沉醉)的方法在tomcat和apache中均显示???????2[1].7.rar
      

  6.   

    这样:
    你取得url时,看看url是多少:out.println(url);
    我猜url只要包含中文就已经是乱码了。
    如果是的话:你把url转化一下。按我的方法试试url=convertCNForDisplay(url),注意是静态方法的调用啊,好运!
      

  7.   

    会不会是下面这个原因呢?
    你可以用apache1.3.2z试试,也许行
    或者你打开apache2的配置文件,把charset设成gb2312试试
      

  8.   

    搞定了,谢谢大家的帮助。使用response.addHeader("Content-Disposition","attachment;filename="+java.net.URLEncoder.encode(filename,"UTF-8"));
    就行了,但要注意的是filename必须是GBK编码的。
    我猜想java.net.URLEncoder.encode(url,charset)可能要求url的编码和java虚拟机中的默认编码相同,才能正确转换。