Apache tomcat 6、Java、JSP、および Oracle を使用して春の Web アプリケーションを開発しています。
Web サイトでは、いくつかのファイルをアップロードできます。これらのファイルには、名前に特殊文字 (á、Ó、€ (ユーロ記号)、#... など) が含まれている場合があります。次の問題は、ファイルにユーロ記号が含まれている場合です(Á、ó などは正常に機能します)。
簡単に言えば
これらのファイルをデフォルトのエンコーディングでアップロードすると、データベースとファイルシステムに適切に保存されませんが、JSP では名前が適切に表示されます (すべての場所ではなく、一部の場所のみ)。CP850 エンコーディングを使用してアップロードすると、データベースとファイルシステムに適切に保存されますが、正常な JSP の場所に名前が正しく表示されません。
詳細
app-config.xml で次の構成を使用して、Spring の CommonMultipartResolver でアップロードを処理しています。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes (2097152 B = 2 MB) -->
<property name="maxUploadSize" value="1073741824"/>
</bean>
ファイルの名前は、jQuery を使用して JSP の 2 つの異なる場所に表示されます。これが最初の場所です:
<display:table name="${listDocuments}" requestURI="" id="documents" class="tableResult2" pagesize="10">
<display:column titleKey="folderForm.name" class="dossierCodeCell" style='width: 250px;max-width: 250px;'>
<a href="<c:url value="downloadDoc.html?id=${documents.id}&version=${documents.version}"/>">${documents.name}</a>
</display:column>
<display:column titleKey="folderForm.userModification" style="width:70px"
property="lastModificationUser" class="dossierCodeCell" />
<display:column titleKey="folderForm.modificationDate" style="width:120px"
property="lastModificationDate" class="dossierCodeCell" />
</display:table>
${display.name} は、ファイルの名前を取得する場所です。
そして第2位は次のとおりです。
<table width="100%">
<tr>
<td width="50%">
<label style='display: inline;' class='fieldTitle'>
<b><fmt:message key='folderform.MainHeader' /></b>
</label>
<label style="display: inline;" class='fieldTitle'> <c:out value="${parentFolderName}"></c:out>
</label>
</td>
<td width="50%">
<label style='display: inline;' class='fieldTitle'>
<b>Documento:</b>
</label>
<label style="display: inline;" class='fieldTitle'></label>
<label style="display: inline;" class='fieldTitle' id="editFileName"></label>
</td>
</tr>
</table>
ここでは、ボタンをクリックするときに次の jQuery コードを使用して、.editFileName ラベルにドキュメント名を動的に表示しています。
$('.editDocRow').live('click', function() {
var params = {};
params.fileId = $(this).find(".fileId").val();
$.getJSON("GetFileInfo.html", params, function(data) {
uploadfileBoxy = new Boxy(htmlPopupEditFiles, {
title : "<fmt:message key='button.updloadDocumentVersion'/>",
unloadOnHide : true,
modal : true
});
**$("#editFileName").html(data.fileName);**
})
});
このデフォルト構成を使用すると、ファイル名に特殊文字が含まれていると正しく変換されません (デバッグ中に正しい文字が表示されません): データベース (SQLDeveloper を使用) では問題なく表示され、ファイルシステムでは問題なく保存されます最初の JSP の場所は正常に保存されていますが、2 番目の JSP の場所では正常に表示されていません。
ただし、 commonsMultipartResolver のデフォルトの文字セットを次のように変更すると:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes (2097152 B = 2 MB) -->
<property name="maxUploadSize" value="1073741824"/>
<property name="defaultEncoding" value="Cp-850"/>
</bean>
次に、データベースとファイルシステムに正常に保存されますが、最初の JSP の場所では正常と表示されず、2 番目の場所では正常と表示されます。したがって、ここで唯一の問題は、最初の JSP の場所に名前を表示することです。
HTMLページに次のエンコーディングを使用しています。
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
この文字セットを変更しようとしましたが、成功しませんでした。
何か助けはありますか?ありがとう
アップデート
アプリケーション全体が € 記号の正しい文字セットを使用していないようです。名前に € 記号を含む会社を (別の Web ページで) 作成すると、JSP では正常に表示されますが、€ 記号がデータベースに正しく保存されません。どうすればよいですか?