閱讀467 返回首頁    go 阿裏雲 go 技術社區[雲棲]


PostMethod提交帶有附件的的form亂碼問題解決

主題,直接重點:

=====================================================================

通常會直接如下這樣寫:

Part[] parts = {
                 new StringPart("name", "HelloWorld,小單"),
                 new FilePart("file", new File("e:\\resume.doc"))
        };
        PostMethod mPost = new PostMethod(url);
        mPost.setRequestEntity(new MultipartRequestEntity(parts, mPost.getParams()));
        int status = httpClient.executeMethod(mPost);

不出意外的話,會出亂碼 ^_^


做如下修改,在new StringPart方法中增加參數,charset

 Part[] parts = {
                 new StringPart("name", "HelloWorld,小單", "UTF-8"),
                 new FilePart("file", new File("e:\\resume.doc"))
        };


原因:

查看StringPart源碼,如下:

    /** Default charset of string parameters*/
    public static final String DEFAULT_CHARSET = "US-ASCII";

    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;
    }


如不指定charset,則會使用默認編碼“US-ASCII”。

PS:我用的jar包為 commons-httpclient-3.1.jar

最後更新:2017-04-02 15:28:22

  上一篇:go 為什麼我們程序員難晉升
  下一篇:go PostMethod提交302錯誤