- PR -

日本語の一部文字化け

1
投稿者投稿内容
takasaki
常連さん
会議室デビュー日: 2002/02/14
投稿数: 31
投稿日時: 2002-05-02 13:04
Tomcatを使う「JSPプログラミング」第10回ののサンプルを動かしたのですが、
カナが一部文字化けを起こします。(タロウの<ロウ>のみ化ける)
どのような理由が考えられるのでしょうか。

文字コード変換の部分のみ
name = new String(name.getBytes(), "EUC_JP");
のように書き直しています。

JSP環境
OS Windows2000 SP2
JDK Version 1.3.1_01
Tomcat Version 3.2.1
Apache Version 1.3

DB環境
OS RedHatLinux7.1
PostgreSQL Version 7.1.3
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-05-02 15:02
> 文字コード変換の部分のみ
> name = new String(name.getBytes(), "EUC_JP");
> のように書き直しています。

このコードがnameの内部エンコーディングとして何を仮定しているのかが不明確です。
これでは、getBytes()がnameの文字列をShift_JISのバイト列に変換し、次にそれをEUC_JPのエンコーディングとみなして文字列を作成してしまいます。

※ TomcatはWindows上で動いているのでgetBytes()で使用されるデフォルトエンコーディングはShift_JISになります。

元記事はDBから得た文字列の内部コードがEUC_JPであることを前提に文字列変換をしていますが、これはpostgresの古いバージョン6.xを使っているためだと思います。

そもそも、このような文字列の変換をしなくても、postgres 7.1.3のJDBCドライバなら日本語対応しているはずです。rs.getString("name")のようにして得た文字列をそのまま使えないかどうか、試してみるとよいでしょう。



takasaki
常連さん
会議室デビュー日: 2002/02/14
投稿数: 31
投稿日時: 2002-05-02 15:31
mikiさんアドバイスありがとうございます。

rs.getString("name")を直接表示はやってみたのですが、ダメでした。
「ジェイエスピー タ」まではちゃんと表示されて、「ロウ」だけが文字化けする、というのは
JDBCドライバのせいなのでしょうか?
ちなみにnameの内部エンコーディングはEUCです。

name = new String(name.getBytes(), "EUC_JP");
のgetBytes()のパラメータには
"ISO-8859-1", "UTF-8", "UTF-16BE","UTF-16"を試したのですが、パラメータなしが
ほぼ正常に表示されたので指定しませんでした。

さらなるアドバイスをお願いいたします。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-05-02 17:00
> JDBCドライバのせいなのでしょうか?

まさか、拾ってきたドライバではないですよね。

私は次のようにしてpostgresサーバとJDBCドライバを作っています。
./configure --enable-multibyte=EUC_JP --with-java

こうして作ったpostgres、Javaクライアントの両方ともRed Hat Linux 7.2Jで動かしていますが、日本語が化けて困ったことはありません。念のため「ジェイエスピー タロウ」を試してみましたが、問題なくJavaで表示することができました。文字列の特別な変換は一切していません。

まず、Linux内で閉じた環境で正しく動くことを確認してはどうでしょう。
それで動かなかったらDBのコンフィギュレーションを見直した方がよいかもしれません。

WindowsからLinuxのpostgresにアクセスしたときだけに発生するJDBCドライバの問題だと確信が持てたならpostgresのML等に問い合せたらどうですか。




takasaki
常連さん
会議室デビュー日: 2002/02/14
投稿数: 31
投稿日時: 2002-05-02 19:03
たびたびです。

DB環境でPostgreSQL7.1.3と書いたのですが、7.2.1の間違いで、ドライバは
http://jdbc.postgresql.org/download.html
からDLしたpgjdbc2.jarを使っています。

>まず、Linux内で閉じた環境で正しく動くことを確認してはどうでしょう。

そうですね。
環境を作ってから試してまた報告します。
ありがとうございました。
takasaki
常連さん
会議室デビュー日: 2002/02/14
投稿数: 31
投稿日時: 2002-05-08 15:43
やっとLinux内で閉じた環境でのテストが可能になりましたので報告します。
ドライバは同じやはりこちらでは正常に表示されました。
WindowsからLinuxのpostgresにアクセスしたときだけに発生するということみたいです。

環境
OS  RedHatLinux7.2
JDK Version 1.4.0
Tomcat  Version 4.0.3
Apache  Version 1.3
PostgreSQL Version 7.2.1
JDBCDriver pgjdbc2.jar(http://jdbc.postgresql.org/download.htmlよりDL)
愚者
会議室デビュー日: 2002/03/20
投稿数: 9
投稿日時: 2002-05-08 15:44
createdbコマンドでエンコーディング指定(???)すれば問題なかったような気がします。
たしか
createdb -E EUC-JP DB名称
だったかな?
あいまいなので時間があったから調べます。

ちなみに私もpgjdbc2.jarを使いましたが、問題なかったような気がします。
1

スキルアップ/キャリアアップ(JOB@IT)