2

を使用してテーブルを編集するのに問題があります<p:rowEditor>

以前はスウェーデン語の文字を使用encoding='windows-1252'できました。エンティティの作成は正常に機能しますが、エンティティを使用して編集すると、予期しない文字がコミットされます。((を使用して)編集を入力して保存すると、データベース内のテーブルに が含まれます)。 (å, ä, ö)<p:dataTable><p:cellEditor>"åäö"p:celleditor"åäö"

私のxhtmlページは次のように始まります:

<?xml version='1.0' encoding='windows-1252' ?> 
<!DOCTYPE html>
<html...

文字エンコーディングフィルターを使用してみました:

public class CharacterEncodingFilter implements Filter {

    private static String ENCODING = "windows-1252";

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding(ENCODING);
        response.setCharacterEncoding(ENCODING);
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
    }
}

しかし、役に立たない。異なる文字エンコーディングを使用してインセル編集投稿を行う理由はありますか?

使用:

  • NetBeans 7.0.1
  • グラスフィッシュ 3.1
  • プライムフェイス 3.0.M4
4

1 に答える 1

9

「åäö」と入力して編集を保存すると(p:celleditorを使用)、データベースのテーブルに「åäö」が含まれます

これは、UTF-8でエンコードされた文字の典型的なCP1252表現です。UTF-8では、これらの文字は次のバイトで表されます。

CP1252コードページレイアウトでこれらの6つの個別のバイトを検索すると、それらが正確にそれらの文字を表していることがわかりますåäö

JSF / Faceletsは、HTML応答の生成とPOST要求の処理に関して、デフォルトでUTF-8文字エンコードになっています。そのXMLencoding属性は、実際には何も変更しません。これは、適切な文字エンコードでファイルを解析できるように、ファイルを書き込んだ/保存した文字エンコードをXMLパーサーに通知するだけです。

HTML応答の文字エンコードとPOSTリクエストの処理を変更するにencodingは、ビュールートタグの属性を設定し<f:view>ます。

<f:view encoding="CP1252">

ただし、これは強くお勧めしません。このようにして、100万文字を超える文字をサポートするユニバーサル文字エンコードから、255文字以下をサポートし、Windowsプラットフォームでのみ理解される独自の文字エンコードにフォールバックします。Mac / Linuxまたはその他のオペレーティングシステムを使用するWebページの訪問者は、その文字エンコードでHTML応答を適切に解釈できず、その文字エンコードでデータを送り返すこともできません。あなたのウェブアプリケーションは成功する世界支配の準備ができていません。

この問題を別の方法で解決する必要があります。UTF-8をサポートするために変更する必要があるのは、明らかにデータベースです。DBのメーカー/バージョンについて何も言わなかったため、これをどのように正確に行うかについては答えられません。ただし、DB /テーブルの文字エンコードの変更は、一部のSQLコマンドの問題である必要があります。または、実験している場合は、DBを切り捨てて、適切な文字セットで再作成するだけです。詳細については、DB固有のSQLマニュアルを参照してください。

参照:

于 2011-12-10T04:30:06.150 に答える