0

JSP を使用してプレゼンテーション層を備えた Web アプリケーションを構築しました。すべての JSP で、次のように文字セットを定義しました。

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...

ユーザーがユーザー プロファイルの情報を編集したい場合は、オブジェクトをフォームに読み込みます。ページがOperaChromeSafariまたはIE 10 (Windows 7)でアクセスされていた場合、フォームをバックエンド (Java) に送信し、データがデータベースにマージされると、一部の文字が正しく保存されません。主に: á, é, í, ó, ú, ... しかし、Firefox では問題ありません。

私は Oracle 11g を実行しています。これは文字セットです。

SQL> select * from v$nls_parameters;

PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_LANGUAGE
SPANISH

NLS_TERRITORY
SPAIN

NLS_CURRENCY
Ç


PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_ISO_CURRENCY
SPAIN

NLS_NUMERIC_CHARACTERS
,.

NLS_CALENDAR
GREGORIAN


PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_DATE_FORMAT
DD/MM/RR

NLS_DATE_LANGUAGE
SPANISH

NLS_CHARACTERSET
AL32UTF8


PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_SORT
SPANISH

NLS_TIME_FORMAT
HH24:MI:SSXFF

NLS_TIMESTAMP_FORMAT
DD/MM/RR HH24:MI:SSXFF


PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_TIME_TZ_FORMAT
HH24:MI:SSXFF TZR

NLS_TIMESTAMP_TZ_FORMAT
DD/MM/RR HH24:MI:SSXFF TZR

NLS_DUAL_CURRENCY
Ç


PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


19 rows selected.

他のコンピューターでプロファイルを編集することを確認しましたが、結果は同じです。どこに問題があるのか​​ わかりませんが、助けはありますか?ありがとう

更新:フォーム送信時の JS コード:

$(function() {
    $('#user-update').submit(function(event) {    
        event.preventDefault();
        ...
        $.ajax({
            type: 'PUT',
            url: '/user/${user.userId}/update',                    
            data : JSON.stringify($('#user-update').serializeObject()),
            contentType: 'application/json',
            success: function() {
            ...
4

2 に答える 2

0

ページのコンテンツ エンコーディングは、送信されたフォーム データのエンコーディングとは何の関係もありません (とにかく、あなたが気にするどんな方法でも)。

私は少し心配ですJSON.stringify($('#user-update').serializeObject())。への呼び出しstringifyは必要ありません。jQuery がそれを行います。これで十分です:

data: $('#user-update').serializeObject(),

これにより、ブラウザとサーバー間のすべてのエンコーディングの問題も解決されるはずです-jQueryはそれを確認します。

この問題をデバッグするには、次の場所にログを追加する必要があります。

console.log($('#user-update').serializeObject());

AJAX リクエストの前。Web ブラウザーの開発者ツールを使用して、ネットワークの要求と応答を確認することもできます。

サーバー側では、取得したデータをログに記録して、データベースにガベージを送り込まないようにします。次に、SQL ツールを使用してデータベース内のデータを照会し、データが正しい方法で保存されていることを確認します。

最後に、コードがデータベースからデータを再度読み取った後、データをログに記録します。

将来的には、上記の各ステップの単体テストを作成することをお勧めします。これにより、そもそもこの混乱を防ぐことができたからです :-)

于 2013-09-11T08:24:53.240 に答える
0

ファイルに追加CharacterEncodingFilterして解決しました:web.xml

<filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
于 2014-09-12T14:10:19.370 に答える