- PR -

文字コード変換に関して

1
投稿者投稿内容
ゆう
常連さん
会議室デビュー日: 2001/12/10
投稿数: 33
投稿日時: 2005-05-31 14:14
「環境」
WEBサーバ:soralis(EUC_JP)
DBサーバ:soralis(Shift_JIS)
DB:oracle9i
JDBCドライバ:タイプ2

DBより日本語文言を取得し、JSPで画面表示するという単純な処理を作成しています。
ところが画面に出力すると日本語の部分は??になってしまい、文字化けしています。

1.JSPにはヘッダー部に以下を記述しています。
<%@ page contentType="text/html; charset=Shift_JIS" %>

2.EclipseでDBから取得した日本語文字列をコンソールに出力した場合は正しく出力される。

3.DBから取得した文字列を16進数ダンプを出力してみましたが、文字化けはしていません。

4.DBから取得した文字列をShift_JISからEUC_JPに変換してみましたが状況は変わりませんでした。
 ちなみに以下のコードで文字コード変換してますが、そもそもこれは正しいのでしょうか。
機種依存文字などは入力できないことが前提です。
 →xxxSet(new String(data.getBytes("Shift_JIS"), "EUC_JP"));

文字コード変換部分と文字化け対処法を教えてください。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2005-05-31 15:04
文字化け関係に関しては、まず、どこで化けているのかを正確に把握するのが大事です。一般的には、普通に中身を見てみて(oracleならsql*plusでselectしてみるとか、javaなら単純にデバッグプリントしてみるとか)、普通に表示されたらそこまでは大丈夫ということです。

今回は……

引用:

2.EclipseでDBから取得した日本語文字列をコンソールに出力した場合は正しく出力される。



とのことですから、

コード:

↓(OK)
DB(OK)
↓(OK)
Servlet(OK)
↓(あれれ?)
ブラウザ表示(NG)



という状況であると思われます。

そうすると、今回のケースではDBは一切関係無くて、ただ単純に、JSPを使って正しく日本語ページ生成を行わせることが出来るか……というお話だと思われます。

具体的にどうするかですが。多分、文字コード変換系のコードを一切排除すれば、ちゃんと表示されるようになると思います。


[ メッセージ編集済み 編集者: 永井和彦 編集日時 2005-05-31 15:15 ]
mone
常連さん
会議室デビュー日: 2005/05/18
投稿数: 37
投稿日時: 2005-05-31 17:26
Java内部の文字コードはUnicodeですよ?
#入出力にはUTFを使いますが
EUCに変換する理由はないと思います。

文字コード変換がわからなければ
とりあえず、いろいろ変換してSystemOutで見てみること。
これで大抵解決します。

JSP側ではShift_JISで読もうとしているのに
EUCの文字列が入ってきているために読めなくなってしまっているかと。

実際にどこの部分で化けているか、
どの文字コードとどの文字コードの変換がうまくいっていないか
を考えて実験してみると自分の力になってよいと思いますよ。
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2005-05-31 23:03
引用:

ゆうさんの書き込み (2005-05-31 14:14) より:

 ちなみに以下のコードで文字コード変換してますが、そもそもこれは正しいのでしょうか。
機種依存文字などは入力できないことが前提です。
 →xxxSet(new String(data.getBytes("Shift_JIS"), "EUC_JP"));


これは確実に「間違っています」。
DB接続パラメータ等を適切に設定して、 yyy.xxxSet(data); とするようにしましょう。

String#getByte(String) と new String(byte[]) は
よほどのことが無い限り使ってはいけません。
1

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