0

さまざまな言語 (ドイツ語、スペイン語など) で動作するアプリケーションを開発しています。アプリケーションは Oracle DB を使用します。CRUD ビジネス プロセスがあり、標準ビュー (作成、編集、表示、リスト) があります。ä、ö、ü などの特殊文字を含むレコードの作成、表示、一覧表示には問題ありません。ただし、この文字を含むエントリを編集すると、エンコードされたバージョンが取得されます。すなわち & auml; ä & ouml; の代わりに ö & uuml; の代わりに üの代わりに

等々。

この問題を解決するヒントはありますか?

ありがとう!

更新 ご協力いただきありがとうございます。完全なシナリオについて説明します。

私はgrailsで書かれたWebアプリケーションを持っています(grailsのgroovy)。開発には、Jetty をサーバーとして使用し、Oracle 10g を使用しています。テストと本番用に Tomcat 6.0.18 を使用しており、Oracle 10g の Java バージョンは 1.6.0_02 です。

多くの CRUD プロセス (作成、取得、更新、削除) があります。アプリケーションは多言語です。つまり、ä、ö、ü、ß、á、é、í、ó、ú の文字 (文字) をコンテンツとして許可する必要があります。

ビューは gsp で記述されます。標準の .gsp ビュー (作成、編集、表示、リスト) を使用しています。作成、表示、一覧表示は問題ありません。つまり、作成ビューの下でこの特殊文字を使用して単語を入力すると、これは show.gsp または list.gsp の下に正しく表示またはリストされます。

このような文字を含むレコードを編集するときに問題が発生します。代わりに - としましょう - äがフィールドに表示されます & auml; (これは ä の html エンコーディングです)。

次の設定があります。

Config.groovy grails.views.gsp.encoding="UTF-8" grails.converters.encoding="UTF-8" の下

すべての .gsp ページには、次のメタ タグがあります。

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

すべてのフォームには次の属性があります。

<g:form accept-charset="UTF-8" method="post" >

Tomcat の下で、次の設定を行いました。

tomcat は、次のオプションで起動されます。

CATALINA_OPTS=-Dfile.encoding=UTF-8
JAVA_OPTS="-Duser.language=de -Duser.country=DE"

web.xml の下で、次のフィルターを設定します

 <filter>
   <filter-name>SetCharacterEncoding</filter-name>
   <filter-class>filters.SetCharacterEncodingFilter</filter-class>
   <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
   </init-param>
 </filter>

myApplication/WEB-INF/classes/filters の下に、examples/WEB-INF/classes/filters から SetCharacterEncodingFilter.class をコピーしました。

server.xml の下に、次のコネクタを設定します。

 <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="UTF-8" />

シナリオは次のとおりです。サーバーは、フォームを編集するための要求を受け取ります。サーバーはDBから情報を取得してから、DBがすでにhtmlエンコードされた情報を送信している(そうは思わない)か、サーバーがそれをエンコードしてクライアントにエンコードして送信しています。

さらに、私のコントローラーでは、サーバーから取得した情報が html エンコードされていないことがわかります。

このエンコードの問題に対処するためにどの設定を行う必要があるのか​​ わかりません(これには多くの時間と労力がかかります)。

よろしくお願いします。

ルイス

4

2 に答える 2

1

目に見えるものを常に信頼できるとは限らないため、エンコーディングは難しい問題です。通常、問題を解決するには utf-8 を使用するだけで十分です。ただし、Oracle サーバー、Oracle クライアント (jdbc)、groovy ファイルなど、どこでも使用していることを確認してください。Java は utf-16 を使用することに注意してください。jdbc ドライバーがこの変換を行う必要があります。与えるべき最善のアドバイスは、Java (したがって groovy) が文字エンコーディングに関して言うことを正確に実行するため、問題が発生しないということです。システムの各側面の実際のビット (16 進値) を調べることができるツールがあることを確認してください。mysql では、16 進数です: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex
オラクルにも同様の機能があると思います。ここでも、クライアントが utf-8 を使用するように構成されていることを確認してください。その前に火傷しました。ソース ファイル (またはログ ファイル) を調べるには、xxd や od などを使用します。cygwin を使用している場合は、(vt フォント メニューで) utf8 を有効にしてください。Windows を使用していて cygwin を使用していない場合は、ぜひ試してみてください (必ず x バージョンを使用してください)。

于 2009-09-10T16:12:04.290 に答える
1

すべての設定に加えて、すでに行われています。私は設定しました:

grails.views.default.codec="html" // none, html, base64

none の代わりに、問題は解決されます。

私の問題はすでにここで公開されていました: http://www.groovy-forum.de/read.php?3,5008,5630

詳細については、次を参照してください。

http://jira.codehaus.org/browse/GRAILS-1827

ルイス

于 2009-09-24T06:15:17.033 に答える