- - PR -
DBの値を取り出す際の文字化けについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-03 20:59
間違い。
「テスト」のEUCコード a5 c6 a5 b9 a5 c8 を 0x00a5 0x00c6 0x00a5 0x00b9 0x00a5 0x00c8 というUnicodeとみなして、 UTF-8 にエンコードしたものですね。 new String(rs.getString("uname").getBytes("8859_1"),"EUC-JP"); で元に戻るのかなぁ? こういう姑息な手段に逃げても、後でもっと大きな不幸が待っているだけのような気がします。 | ||||
|
投稿日時: 2006-09-04 01:32
すいません。ご回答いただき大変助かっているのですが、
文字コードに疎く、混乱してしまっています。 「テ」1文字のみで考えると、以下の考えであっているでしょうか。 原状: EUCのコード(a5 c6)をデータベースに渡している。 DB側では(a5 c6)をUnicodeとみなし、DBにはUTF8(c2 a5 c3 86)に変換して格納されている。 この「変換」は、EUC→UTF8変換になる(?) a5 → c2 a5 c6 → c3 86と変換しているイメージ(?) 改善策: EUCの「テ」(a5 c6)をUTF8の「テ」(e3 83 86)にWEB側で変換してから、DBに送信すればそのまま格納されて問題は起きない。 | ||||
|
投稿日時: 2006-09-04 09:10
といいますか、単にJDBC接続の文字コードの設定がうまくいっていないのでは。 環境がLinuxですから、デフォルトのエンコードである EUC-JPで変換されているのではないかと思うのですが。 正しく設定されていれば、JDBCで文字列を渡せばDB内に正しく格納されるはずです。 そして正しく取得できるはずです。 データの出し入れの際に文字コードを意識する必要はありません。 もし、意識しないといけないのだとしたら、それは通常は設定の問題です。 | ||||
|
投稿日時: 2006-09-04 11:27
文字コードの変換は、
ブラウザ→webアプリ webアプリ→DB の2箇所で行われます。 そのどちらに問題があるか(あるいは、両方とも問題があるのか)、判断できる材料は 今のところ提示されていません。 | ||||
|
投稿日時: 2006-09-04 15:10
今回の対象システムの構成ですが、既に構築されたAシステムがあり、
新たに構築したBシステムからAシステムのDB(MySQL)を参照するという形式に なっています。両システムは同一マシンで稼働。DBを両システムで共有。 本スレッドの最初の投稿で説明した環境は、すべてBシステムの環境になります。 AシステムはJavaではなくPHPで作成されています。 Aシステムは、FedoraCore5(デフォルトエンコーディングはutf8)、 MySQL(エンコーディングはutf8に設定)を利用しており、日本語の表示もAシステムのWEBサイトの 表示では問題なかったため、DBにはutf8で格納されているものと思い込んでいました。 DBには、UnicodeでないものをUTF8でエンコードしたものが入っているという 異常な状態になっているんですよね…。 なぜだろう…。Aシステムの書き込み時の動作をもう少し調べてみます。 |