11

firebird をデータベースとして使用して、Fedora 17 の tomcat6 で JSF アプリケーションを実行していますが、データベースからアプリケーションへのすべてのレジスタにエンコードの問題があります。

言語はブラジルのポルトガル語なので、é と ã と ç が必要ですが、これらの特殊文字にはすべて問題があります。

元のソースコードの é と ã は問題ありませんが、データベースから直接来るものだけが問題を引き起こしています...

何が起こっているのですか?

その奇妙なキャラクターが é であるべき画像を次に示します。

問題のあるデータテーブル

問題は、DB から回復するときに発生します。

4

3 に答える 3

24

JDBC 接続 URL でクエリ パラメータを使用encoding=ISO/UTF/WIN...すると、問題が解決しました。

例えば:

jdbc:firebirdsql:url:db?encoding=ISO8859_1
于 2012-10-31T17:59:32.753 に答える
2

encodingJaybird で接続文字セット ( Firebird 文字セット名を使用するプロパティ、または Java 文字セット名を使用するプロパティ) を指定しない場合、charSetJaybird は Firebird の接続文字セットの概念にフォールバックしますNONE。サーバーは (VAR)CHAR 列のストレージ表現から文字を翻字せず、そのバイトをそのまま送信します。

これは、Jaybird が未知の文字セットで一連のバイトを受信することを意味します。Jaybird は、Java インストールのデフォルトの文字セットを使用して、これらのバイトを文字列に変換します。そのため、データベース (または列) の文字セットが Java の文字セットと一致しない場合、正しくない結果が生成される可能性があります。さらに悪いことに、デフォルトのJava文字セットが異なる異なるシステムからこのように読み書きすると、完全なゴミまたは音訳エラーが発生する可能性があります。

解決策: 常に明示的な接続文字セットを指定します。さらに良いのは、データベースにデフォルトの文字セットがあることを確認することです (または、すべての(VAR)CHAR列に文字セットが明示的に定義されていることを確認してください)。

Jaybird の次のバージョン (2.3) は、ユーザーにこの問題を考慮するよう強制する明示的な接続文字セットが指定されていない場合、おそらく接続を拒否します (また、古い動作が必要な場合は、明示的に を指定できますencoding=NONE)。

于 2012-11-01T13:53:52.530 に答える