- - PR -
日本語の一部文字化け
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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 |
|
投稿日時: 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")のようにして得た文字列をそのまま使えないかどうか、試してみるとよいでしょう。 |
|
投稿日時: 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"を試したのですが、パラメータなしが ほぼ正常に表示されたので指定しませんでした。 さらなるアドバイスをお願いいたします。 |
|
投稿日時: 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等に問い合せたらどうですか。 |
|
投稿日時: 2002-05-02 19:03
たびたびです。
DB環境でPostgreSQL7.1.3と書いたのですが、7.2.1の間違いで、ドライバは http://jdbc.postgresql.org/download.html からDLしたpgjdbc2.jarを使っています。 >まず、Linux内で閉じた環境で正しく動くことを確認してはどうでしょう。 そうですね。 環境を作ってから試してまた報告します。 ありがとうございました。 |
|
投稿日時: 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-05-08 15:44
createdbコマンドでエンコーディング指定(???)すれば問題なかったような気がします。
たしか createdb -E EUC-JP DB名称 だったかな? あいまいなので時間があったから調べます。 ちなみに私もpgjdbc2.jarを使いましたが、問題なかったような気がします。 |
1
