為了通用,從頭到尾都是utf-8.
而webwork中JakartaMultiPartRequest對于多編碼的處理并不如意.
apache的fileupload對于上傳文件名為中文的需要首先指定HeaderEncoding的編碼.
而webwork對于MultiPartRequest的request并沒有設置encoding編碼
詳見DispatcherUtils.java中 387行
????????
if
?(encoding?
!=
?
null
?
&&
?
!
MultiPartRequest.isMultiPart(request))?
{

????????????
try
?
{
????????????????request.setCharacterEncoding(encoding);

????????????}
?
catch
?(Exception?e)?
{
????????????????LOG.error(
"
Error?setting?character?encoding?to?'
"
?
+
?encoding?
+
?
"
'?-?ignoring.
"
,?e);
????????????}
????????}
如果沒有指定HeaderEncoding, 那么默認采用request的encoding,如果request也沒有指定則采用系統的編碼.
這里并沒有指定request的encoding,往往導致上傳文件的名字亂碼.
自定義一個MultiPartRequest,設定一下就ok了
對于同時提交的表單域(form)參數,由于在form中指定的enctype的關系,并不能直接用request.getParameter()才取, 只能通過FileItem.getString()的方式.這里也是上面的問題, 取的CharacterEncoding是request中的,由于webwork的原因不一致.同樣需要指定一下.
這樣form和上傳同時提交,參數,附件名都正常了 :)