网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Java Applet编程之播放声音文件.
.java接口用法学习--------------.
.Java程序的编码规范.
.在Java中发送邮件的一个相当完善.
.osworkflow 小培训(2).
.JDBC和Hibernate来写入Blob型数据.
.JDBCTM 指南:入门1 - 介绍.
.Servlet实现动态图文结合输出.
.全面挖掘Java Excel API 使用方法.
.jive中的abstract Factory.
.对J2EE几点的理解.
.逻辑“非”运算符 (!).
.采用HTTPClient通过代理连接服务.
.Java在数字地球系统开发中的Web应.
.用javamail显示复合邮件的内容的.
.sun Technical Training NOTE.
.类装入问题解密,第 1 部分: 类装.
.20分钟熟悉猛虎脾气----JDK1.5新.
.为WebLogic 8.1 Platf.
.开发工工具配置笔记——Jcreator.

httpclient3.0 上传文件名及field中文解决方法

发表日期:2008-1-5


最近利用httpclient来做模拟表单提交的程序,发现这个咚咚对中文的支持实在是差,查看源码后发现问题出现
在org\apache\commons\httpclient\util这个包里的EncodingUtil.Java,和org\apache\commons\httpclient\methods\multipart这个包里的StringPart.java及FilePart.java这三个类里面。

先说说EncodingUtil这个类,虽然你可以在第50行看到
private static final String DEFAULT_CHARSET = "iso-8859-1";
这样的定义,但你在往下看就会发现getAsciiBytes(final String data)这个里并没有用这定义的编码来对数据进行encoding.而是用了US-ASCII码来进行encoding的。程序如下:
public static byte[] getAsciiBytes(final String data) {

        if (data == null) {
            throw new IllegalArgumentException("Parameter may not be null");
        }

        try {
            return data.getBytes("US-ASCII");  //就是这一句拉
        } catch (UnsupportedEncodingException e) {
            throw new HttpClientError("HttpClient requires ASCII support");
        }
    }


把编码该成你自己想要的吧。在这里解决了上传文件名为中文的问题。接下来解决field字段内容为中文的的问题
修改StringPart中58行:
 public static final String DEFAULT_CHARSET = "US-ASCII";
同理,改成你自己想要的编码
然后重新编译打包。记得把logging 和codec 这两个包引进项目里。否则编译会出一堆错误。

其实在StringPart这个类里是提供了自定义编码格式的方法。可是在FilePart类里没有实现而已。
第79行:
public StringPart(String name, String value, String charset) {

        super(
            name,
            DEFAULT_CONTENT_TYPE,
            charset == null ? DEFAULT_CHARSET : charset,
            DEFAULT_TRANSFER_ENCODING
        );
        if (value == null) {
            throw new IllegalArgumentException("Value may not be null");
        }
        if (value.indexOf(0) != -1) {
            // See RFC 2048, 2.8. "8bit Data"
            throw new IllegalArgumentException("NULs may not be present in string parts");
        }
        this.value = value;
    }
你可以在FilePart里把这个方法实现了。这样你就可以指定编码格式提交表单了。个人觉得这个方法比修改默认编码强。灵活性高些。

其实我只想模拟表单提交,在applet中实现文件上传,本想偷懒不自己写模拟表单提交这块的。用了httpclient这个开源包。可是打完applet的jar包发现这个包竟然350多k。让我非常的郁闷。看来还是需要自己写模拟表单实现提交了。起码打完包也不会超过20k。

假如需要转载,请注明出处和作者。谢谢
QQ:221704
MSN:flyly@yeah.net
EMAIL:zhangfl@sports.cn


上一篇:tomcat配置技巧(转载) 人气:889
下一篇:Lucene中update及delete的实现 人气:630
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐