今日 Web サービス プログラムをデプロイするときに、ページからデータを取得するサーブレットで文字化けの問題が発生しました。サーブレットでテキスト request.setCharacterEncoding("GB2312"); をコードに追加しましたが、依然として文字化けの問題が発生しました。
次のようにオンラインで情報を検索してください。JAVA は Unicode エンコーディングであり、まず ISO8859-1 に変換してから、GBK または GB2312 に変換します。
Javaコード
これは中国人です!
もっと簡単な方法は、サーバーで直接エンコード変換を設定することです。 TOMCAT5.0.28を使用しています。
../Tomcat 5.0/conf ディレクトリで SERVER.XML ファイルを見つけ、ワードパッドで開き、次のように設定します。
URIEncoding="GBK" という属性を内部に追加するだけです。
テストに合格したら完了です。次に、この文 request.setCharacterEncoding("GB2312") がどのような役割を果たしますか。情報は次のように整理されています。
(1) JSP ページは中国語ですが、見ると文字化けしています。
解決策は、JSP を Java ファイルに変換する際のエンコードの問題のため、一部のサーバーでは、中国語が JSP に直接入力された場合、それを ISO8859 として扱います。 1 は間違いなく問題です。これは、Jasper によって生成された Java 中間ファイルを見ることで確認できます。
(2) お客様から提出された中国語の文字コードをRequestオブジェクトを使用して取得すると、文字化けが発生します。
解決策は、サーブレット フィルターであるフィルターを構成することです。コードは次のとおりです。
request.setCharacterEncoding("GBK");
// 次のフィルターに制御を渡します
chain.doFilter(リクエスト、レスポンス);
}
<フィルターマッピング></フィルターマッピング>
<filter-name></filter-name>文字エンコーディングの設定
<url-パターン></url-パターン>/*
漢字を含む情報の処理もあります。処理コードは次のとおりです。
解決策は次のとおりです。
1) tomcat のserver.xml ファイルを開き、ブロックを見つけて次の行を追加します。
URIEncoding=”GBK”
完全なものは次のようになります。
(4) JSP ページとボタンに漢字が含まれていますが、サーバー経由でページを表示すると文字化けが発生します。
解決策は次のとおりです。まず、ローカライズされたメッセージ テキストを JSP ファイルに直接含めず、テキストを <bean:message> タグを通じてリソース バンドルから取得する必要があります。中国語のテキストを Application.properties ファイルに配置する必要があります。このファイルは WEB-INF/classes/* に配置されます。たとえば、ページに名前と年齢の 2 つのラベルがある場合、最初にアプリケーションを作成する必要があります。プロパティ内の内容は name="name" である必要があります。 age = "age" の場合、このファイルを WEB-INF/classes/properties/ に配置し、Application.properties ファイルに従ってエンコードし、名前を Application_cn.properties とする中国語リソース ファイルを作成します。 JDKでは文字エンコード変換を実現できるnative2asciiコマンドが提供されています。 DOS 環境で Application.properties ファイルを配置したディレクトリを見つけます。DOS 環境でコマンドを実行すると、GBK でエンコードされた中国語リソース ファイル Application_cn.properties が生成されます。上記のコマンドにより、次の内容を含む Application_cn.properties ファイルが生成されます: name=u59d3u540d age=u5e74u9f84、Struts-config.xml で構成: <message-resourcesparameter="properties.Application_cn"></message-resources>。この時点で、基本的には半分以上が完了しました。次に、名前のラベルとして、<bean:message key=""name""> を記述する必要があります。ページ上に中国語の名前が表示され、年齢も同様に表示されます。ボタン上の漢字も同様に処理されます。
(5) データベースに書き込まれたコードが文字化けします。
解決策: サーブレット フィルターであるフィルターを構成します。コードは 2 回目と同じです。
JDBC 経由でデータベースに直接接続している場合、データベース内のコードが文字化けしないように、構成コードは次のようになります: jdbc:mysql://localhost:3306/workshopdb? useUnicode=true&characterEncoding=GBK。
データソース経由でリンクしている場合は、このように書くことはできません。まず、Tomcat 5.0.19 でデータソースを設定する場所は、私が作成した C:Tomcat 5.0confCatalinalocalhost の下にあります。プロジェクトはworkshopで、配置されるディレクトリはwebapp配下にあります。workshop.xmlの設定ファイルは以下のとおりです。
<resource name="jdbc/WorkshopDB"></resource>auth="コンテナ"
type="javax.sql.DataSource" />
<resourceparams name="jdbc/WorkshopDB"></resourceparams>
<パラメータ></パラメータ>
<名前></name>工場
<値></値>org.apache.commons.dbcp.BasicDataSourceFactory
<パラメータ></パラメータ>
<名前></name>maxActive
<値></値>100
<パラメータ></パラメータ>
<名前></name>maxIdle
<値></値>30
<パラメータ></パラメータ>
<名前></name>maxWait
<値></値>10000
<パラメータ></パラメータ>
<名前></name>ユーザー名
<値></値>ルート
<パラメータ></パラメータ>
<名前></name>のパスワード
<値></値>
<パラメータ></パラメータ>
<名前></name>ドライバークラス名
<値></値>com.mysql.jdbc.Driver
<パラメータ></パラメータ>
<名前></name>URL
<値></値>
太字の部分に注意してください。正しく設定されている場合、データベース内では中国語が表示されます。このコード行も必要です。なお、フロントスタッフの中にはDreamverを使ってコードを書く人もいますが、注意すべき点が1つあり、それはDreamverでのActionの送信です。 JSP の送信には POST と GET という 2 つの方法があるため、それを送信する必要があります。ただし、これら 2 つのメソッドによって送信されるコードは、エンコーディングの点で依然として大きく異なります。これについては後で説明します。 </bean:message>< /bean:message>