如何利用javamail发送中文名字的附件? 如何利用javamail发送中文名字的附件?我是用jsp做的,tomcat提示找不到文件,因为把附件路径中的中文字符变成了一些不可识别的字符,应该怎么对附件路径进行转换,或者有其他的解决方法吗?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Unicode好像也不行,下面是我写的转换算法,但不管用,请大家看看,该怎么办?谢谢!public String trans2uni(String attachName)//把非ASCII码字符转换为unicode编码 { int length=attachName.length(); String newAttachName=""; String temp=""; int first=0;//指示非ASCII字符的位置 int last=0;//指示ASCII字符的位置 boolean flag=true;//当前字符类型标志。ASCII字符为true,非ASCII字符为false for(int i=0;i<length;i++) { if( !isASCII( attachName.charAt(0) ) ) flag=false; if( isASCII( attachName.charAt(i) ) & (!flag) ) { temp=attachName.substring(last,i);// try { newAttachName+=new String( temp.getBytes(), "unicode" ); } catch(java.io.UnsupportedEncodingException ex) {} last=i; flag=true; } if( !isASCII( attachName.charAt(i) ) & (flag) ) { newAttachName+=attachName.substring(first,i);// first=i; flag=false; } } return newAttachName; }public boolean isASCII(char ch){ if(ch<0||ch>127) return false; return true;} 你这样再试试讷? package redtroy.test;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2005</p> * <p>Company: </p> * @author not attributable * @version 1.0 */public class String2UTF8 { public String2UTF8() { } public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c >= 0 && c <= 255) { sb.append(c); } else { byte[] b; try { b = Character.toString(c).getBytes("utf-8"); } catch (Exception ex) { System.out.println(ex); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) { k += 256; } sb.append("%" + Integer.toHexString(k). toUpperCase()); } } } return sb.toString(); } public static void main(String args[]) { System.out.println(String2UTF8.toUtf8String("S0507010002热血秒月互换1x0.0.txt")); }} 大学时 copy网上一人写的////////////////////////import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;import javax.swing.*; //添加附件 public void affix() { String fileAffix; Enumeration enum=files.elements(); while(enum.hasMoreElements()){ try{ MimeBodyPart mbp=new MimeBodyPart(); fileAffix=enum.nextElement().toString(); FileDataSource fs=new FileDataSource(fileAffix); mbp.setDataHandler(new DataHandler(fs)); mbp.setFileName(MimeUtility.encodeWord(fs.getName(),"GB2312",null)); //防止文件名字中文乱码 mp.addBodyPart(mbp); } catch(Exception e){ JOptionPane.showMessageDialog(this,"附件增加出错"+e); } } files.removeAllElements(); } 求大神帮助 日历记事本代码 ?Java对象? 如何从jTable 获取多行数据? 如何生成有目录结构的jar包 请问这个这个程序建一个文件,并向文件中写入数据有问题吗? 数据库连接问题 一道Java面试题---北电的,进来看看吧 Runtime.getRuntime().exec()函数,输入参数中的通配符(*)不能被UNIX解析,java的缺陷? 请教一个算法的问题 jsp里如何获取传递的参数个数? 请高手解答:jdk中java.exe和javaw.exe的区别?
public String trans2uni(String attachName)//把非ASCII码字符转换为unicode编码
{
int length=attachName.length();
String newAttachName="";
String temp="";
int first=0;//指示非ASCII字符的位置
int last=0;//指示ASCII字符的位置
boolean flag=true;//当前字符类型标志。ASCII字符为true,非ASCII字符为false
for(int i=0;i<length;i++)
{
if( !isASCII( attachName.charAt(0) ) ) flag=false;
if( isASCII( attachName.charAt(i) ) & (!flag) )
{
temp=attachName.substring(last,i);//
try
{
newAttachName+=new String( temp.getBytes(), "unicode" );
}
catch(java.io.UnsupportedEncodingException ex)
{} last=i;
flag=true;
}
if( !isASCII( attachName.charAt(i) ) & (flag) )
{
newAttachName+=attachName.substring(first,i);//
first=i;
flag=false;
}
} return newAttachName;
}public boolean isASCII(char ch)
{
if(ch<0||ch>127) return false;
return true;
}
package redtroy.test;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/public class String2UTF8 {
public String2UTF8() {
} public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255) {
sb.append(c);
}
else {
byte[] b;
try {
b = Character.toString(c).getBytes("utf-8");
}
catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0) {
k += 256;
}
sb.append("%" + Integer.toHexString(k).
toUpperCase());
}
}
}
return sb.toString();
} public static void main(String args[]) {
System.out.println(String2UTF8.toUtf8String("S0507010002热血秒月互换1x0.0.txt"));
}}
////////////////////////
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import javax.swing.*; //添加附件
public void affix() {
String fileAffix;
Enumeration enum=files.elements();
while(enum.hasMoreElements()){
try{
MimeBodyPart mbp=new MimeBodyPart();
fileAffix=enum.nextElement().toString();
FileDataSource fs=new FileDataSource(fileAffix);
mbp.setDataHandler(new DataHandler(fs));
mbp.setFileName(MimeUtility.encodeWord(fs.getName(),"GB2312",null));
//防止文件名字中文乱码
mp.addBodyPart(mbp);
}
catch(Exception e){
JOptionPane.showMessageDialog(this,"附件增加出错"+e);
}
}
files.removeAllElements();
}