[pgsql-jp: 28974] Re: 7.3.xのJDBC ドライバで,特定文字のみ文字化け

T.Suzuki t_suzuki @ kenwood-eng.co.jp
2003年 2月 7日 (金) 11:53:38 JST


お疲れ様です,鈴木です.

おおかわさん,今川さん,情報ありがとうございます.

> Tomcat をお使いとのこと、ページのエンコーディングの設定で SJIS とか
>Shift_JIS とか指定していらっしゃるのでしたら、Windows-31J もしくは MS932
>と指定すれば動くかもしれません。

申し訳ありません,エンコードの問題なのにページエンコーディングの記述が
ありませんでした.
エンコードは,PostgreSQL,ソースファイル,HTMLのページエンコーディングの
全てを EUC-JP で統一しています.
WebサーバとDBはLinuxにインストールしているので,デフォルトエンコーディン
グも EUC-JPです.

>JSP の場合:
><%@ page contentType="text/html; charset=Windows-31J" %>
>
>Servlet の場合:
>res.setContentType("text/html; charset=Windows-31J");
>PrintWriter out = res.getWriter();
念のため,文字エンコーディング変えて実行しましたが,
文字コーディングが存在しないという旨の,Sevlet Exceptionが出ました.


次に,今川さんの方法で試してみました.

>replace( '〜', '\u301C')
>replace( '−', '\u2212')
問い合わせのServletソースを下記の様に,

Private String strAddress;
strAddress = rs.getString("address").replace('\u2212','−');

更新処理のServletを下記の様に,

st.executeUpdate("
    UPDATE employee_table SET address = " + strAddress.replace('−
','\u2212')
);

これは,私の処理が悪いせいだと思うのですが失敗しました.
(getByte()で取得したデータを16進数に変換して,ファイル出力した所
 "−" → e28090 [UTF-8での "−"] となっていました)

> 7.3 から日本語マップに変更があったようです。
>http://www.sankyo-unyu.co.jp/Pool/PostgreSQL.php のパッチが取り込まれた
>のだと認識しています。
やはり,変更があったのですね.
上記の場所より取得した,7.3.X用のパッチを当てました.

# gunzip /tmp/postgresql-7.3.X.ja.diff.gz
# cd /usr/local/src/
  (パッチが,7.3.1 だと当たらない為,一時的に変更)
# mv postgresql-7.3.2/ postgresql-7.3.1/
# patch -p1 < /tmp/postgresql-7.3.X.ja.diff
# mv postgresql-7.3.2/ postgresql-7.3.1/
# ./configure --with-java --with-tcl --with-tk
# make
# make check
# make install

しかし,「〜,‖,─,−」等の文字化けは直りませんでした.

>僕の場合、症状が改善したらOKというスタンスなので、この方法が一般的
>なのかは不明。
変換のマップを作るのは大変そうですね.
次は,置換で動くように修正してみます.

-----------------------------------------
     鈴木 徹 (SUZUKI Toru)
     KENWOOD ENGINEERING CORPORATION
     E-mail:t_suzuki @ kenwood-eng.co.jp
-----------------------------------------




pgsql-jp メーリングリストの案内