1

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 では正常に表示されますが、€ 記号がデータベースに正しく保存されません。どうすればよいですか?

4

1 に答える 1

0

少しハードコーディングして解決しようとしました。コントローラーのデータベースからドキュメントを取得するときに、€ を "&euro" に置き換えています。なので:

for (Document doc : folder.getDocuments()) {
    doc.setName(doc.getName().replace("€", "&euro;"));
}

現在、最初の JSP の場所 (${document.name} を使用する jQuery の場所) では正常に表示されていますが、2 番目の JSP の場所 (Ajax を使用する場所) では名前が € 文字列で表示されています。というわけで、「test €」というドキュメントが、1 位にはそのまま表示されていますが、2 位には「test €」と表示されています。

元の質問の更新で述べたように、アプリケーション全体の文字セットが間違っているようです。どうすれば適切に構成できますか?

于 2013-06-12T10:36:02.757 に答える