- PR -

DBの値を取り出す際の文字化けについて

投稿者投稿内容
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 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");

で元に戻るのかなぁ?

こういう姑息な手段に逃げても、後でもっと大きな不幸が待っているだけのような気がします。

Java使い
常連さん
会議室デビュー日: 2006/08/16
投稿数: 22
投稿日時: 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に送信すればそのまま格納されて問題は起きない。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-09-04 09:10
引用:

Java使いさんの書き込み (2006-09-04 01:32) より:
改善策:
EUCの「テ」(a5 c6)をUTF8の「テ」(e3 83 86)にWEB側で変換してから、DBに送信すればそのまま格納されて問題は起きない。



といいますか、単にJDBC接続の文字コードの設定がうまくいっていないのでは。
環境がLinuxですから、デフォルトのエンコードである
EUC-JPで変換されているのではないかと思うのですが。

正しく設定されていれば、JDBCで文字列を渡せばDB内に正しく格納されるはずです。
そして正しく取得できるはずです。
データの出し入れの際に文字コードを意識する必要はありません。
もし、意識しないといけないのだとしたら、それは通常は設定の問題です。

coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-09-04 11:27
文字コードの変換は、
ブラウザ→webアプリ
webアプリ→DB
の2箇所で行われます。

そのどちらに問題があるか(あるいは、両方とも問題があるのか)、判断できる材料は
今のところ提示されていません。
Java使い
常連さん
会議室デビュー日: 2006/08/16
投稿数: 22
投稿日時: 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システムの書き込み時の動作をもう少し調べてみます。

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