Webアプリケーション開発における中国語の文字化けし問題

3391 ワード

Webアプリケーションにおける中国語の文字化けし問題


Javaプログラムで中国語の文字化けし問題が発生した原因はjavaプログラムと他の記憶媒体がデータを交換する場合、両者の符号化スキームが異なることにある.一般的な中国語文字コード:
  • GB 2312-80 GB 2312は簡体字標準文字符号化方式であり、区位符号に基づいて設計されている.常用の簡体字、日本語のひらがなとカタカナ、ロシア語のシリル文字などの文字が収録されており、繁体字や辺鄙な字はサポートされていない.
  • GBK GBK符号化は、GB 2312符号化のスーパーセットであり、GB 2312と完全に互換性がある.GBKには漢字部首記号、縦句読点などの文字も収録されており、比較的一般的な漢字符号化方式である.
  • Unicodeは言語ごとに独自の符号化スキームを有し、異なる言語のスキームをサポートする必要があるソフトウェアの難易度を増加させたため、Unicodeと呼ばれる世界標準を制定した.
  • UTF-8 UTF-8は国際的な文字を解決するためのマルチ文字符号化スキームであり、英語に対して8ビット符号化を採用し、中国語には24ビット符号化を使用し、世界のすべての国で必要とされる文字を含み、国際符号化であり、汎用型が強い.

  • 中国語の文字化けしの問題の種類:
    1.JSPページ表示文字化けJSPページ表示文字化けは、ページに符号化スキームが設定されていないため、ページのpage命令のcontextType属性とpageEncoding属性、HTML METAラベルのcharset属性の両方から中国語符号化を指定すればよい.コードは次のようになります.
        <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.sql.*"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    2.フォームの中国語提出時に文字化けJSPが発生してページパラメータを取得する場合、一般的にデフォルトの符号化方式(ISO 8859-1)を採用し、ページパラメータの符号化とページの符号化が一致しない場合、文字化けが発生する可能性が高い.文字化けしの問題がここにあると判断した場合、解決策は以下の通りである.
  • フォームデータを取得する場合、まずrequestのsetCharacterEncoding()メソッドを使用してフォームデータを取得する符号化スキームを強制的に設定するが、この方法はフォームのmethod属性がpostの場合にのみ適用されることに注意してください.コードは次のようになります.
  • // tname
      request.setCharacterEncoding("UTF-8");
      String topic=request.getParameter("tname");
  • フォームのmethod属性がget方式である場合、手動変換方式を使用し、コードは以下のように例示される.
  • // tname
      String topic=request.getParameter("tname");
      topic=new String(topic.getBytes("ISO-8859-1"),"UTF-8");
  • 変数をJSPページに出力すると文字化けしてresponseのsetContentType()メソッドで設定されます.
  • response.setContentType("text/html;charset=utf-8");

    3.データベース読み出しデータ表示文字化けして、プログラムがデータベースに情報を保存したり、データベースの情報を読み出したりすると、中国語文字化けしてしまいます.データベースとjspページの符号化が一致することを保証するには、utf-8符号化スキームを統一的に使用することをお勧めします.本稿ではmysqlを例に挙げます.第一歩:データベースの符号化方式を変更するには、まずテーブルの符号化方式を変更し、alter tableテーブル名default character set utf 8;カラムの符号化方式を変更し、alter tableテーブル名changeカラム名データ構造character set utf-8;ステップ2:データベース接続時
    // 、 、 
     connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/database?user=root&password=root&userUnicode=true&characterEncoding=utf-8");