是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);
}
在网上找的,我就用的这个,很好用的
你得转化
//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);
}
在网上找的,我就用的这个,很好用的
学习中.....
我用response.addHeader("Content-Disposition","attachment;filename="+java.net.URLEncoder.encode(filename));
------------------------------------具体看看java.net.URLEncoder的文挡.
<%
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
用alabaza(一再沉醉)的方法在tomcat和apache中均显示???????2[1].7.rar
你取得url时,看看url是多少:out.println(url);
我猜url只要包含中文就已经是乱码了。
如果是的话:你把url转化一下。按我的方法试试url=convertCNForDisplay(url),注意是静态方法的调用啊,好运!
你可以用apache1.3.2z试试,也许行
或者你打开apache2的配置文件,把charset设成gb2312试试
就行了,但要注意的是filename必须是GBK编码的。
我猜想java.net.URLEncoder.encode(url,charset)可能要求url的编码和java虚拟机中的默认编码相同,才能正确转换。