プロが教えるわが家の防犯対策術!

[現象]
携帯電話からJSPで画面(A)を表示をさせ、その画面で入力した文字をサーバ側に返します。
サーバで受け取った文字を利用した画面(B)を携帯で表示させると文字が化けてしまいます。

半角英数字などは正常に表示されるのですが、全角表記の文字は「?」で表示されます。
文字化けしてしまうキャリアはauのみで、docomo、vodafoneは正常に表示できます。
ちなみにIEでも正常に表示できました。

[動作環境]
Apache 1.3.26
Tocmat 4.06
java 1.4.1.02
Win2000Sever SP4

サーブレットでは以下のようにShiftJISからUnicodeに変換するメソッドをかましています。

private static String convertString(String s) {
if(s == null) {
return null;
}
try {
return new String(s.getBytes("8859_1"), "JISAutoDetect");
} catch (UnsupportedEncodingException e) {
return s;
}
}


JSP側でも以下のようにShiftJIS対応をしているはずなのですが・・

<%@page contentType="text/html; charset=Shift_JIS"%>

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=SHIFT_JIS">
<TITLE>XXXXXXX</TITLE>
</HEAD>
<BODY>


はじめに表示させる画面(A)では全角なども正常に表示できているので、ブラウザ→Tomcatの間で
問題が発生しているのではないかと思うのですが、1日潰しましたが解決できません。
auの携帯はW21CAという機種で比較的新しいものです。

どなたかご教授お願いします。

A 回答 (5件)

#4です。

何度も失礼します。

そのページが本番で動作しているのかどうかわからないのですが、好きにしていいようならとりあえず、

request.getParameter()で取得したもののコードを表示してしまったらどうでしょうか?

for(int i = 0 ; i < s.length() ; i++){
String ss = Integer.toHexString((int)s.charAt(i));
//ssを出力

}


それと、HTTPヘッダーはCONTENT_TYPEがあやしいと思われるので、これの内容も一緒に出力してしまえばどうでしょうか?


*興味ある事象ですので、結果がわかったら、是非ご報告ください。
    • good
    • 0

#3です。



処理を分岐するにしても、なぜそうなっているのか原因を調べた方がいいと思います。

その上で分岐するしかなければ仕方ないですが、もしかしたら他に方法が見つかるかもしれません。

単純に考えるとバグも発生するかもしれませんし。


まず、送られてくる文字がどのように送られているのか、
HTTPヘッダーはどうなっているのか、をうまくいく場合と
いかない場合の両方を調べてみる必要があると思います。
    • good
    • 0
この回答へのお礼

そうですね。
Bonjinさんに教えていただいた「Ethereal」にチャレンジしていますが、
まだ時間がかかりそうです。
なんとか、原因究明できるように頑張ってみます。
ご回答ありがとうございました。

お礼日時:2005/06/14 20:04

あまり詳しくはないですが、



request.setCharacterEncoding("Windows-31J");

としてからrequest.getParameter()を呼べばいいのでは?


その場合はconvertString()は使ってはいけません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご指摘の通り変更してみました。
auは正常に表示されましたしたが、その他はキャリアではrequest.getParameter()直後に文字化けしてしまいますね。
やはり、処理を分岐する以外にau,DoCoMo,Vodafoneに対応することは困難ですかね。残念ですけど・・。

お礼日時:2005/06/10 16:18

METAタグの内容なのですが、


CONTENT="text/html;CHARSET=SHIFT_JIS"

content="text/html; charset=Shift_JIS"
と直してみてください。
元情報を見つけられなかったのですが
1.「;」の後ろにある空白は必須
2.「charset」は小文字(必須?)
3.文字コード名はShift_JIS(区別はされないはず)
サーバからのレスポンスヘッダでContentTypeが指定されているので
Metaタグは無視されているはずなのですが、念のために試してみてください。
    • good
    • 0
この回答へのお礼

ご指摘の通りMETAタグ内容を変更しましたが、やはりサーバ側で変換メソッドをかました直後には
「?」となってしまいました。
ご返信ありがとうございました。

お礼日時:2005/06/09 23:22

とりあえずEtherealなどでパケットをキャプチャして、携帯から送られてくる文字コードやサーバが実際に返している文字コードを調べ

てみては?
    • good
    • 0
この回答へのお礼

Etherealは使用したことがないですが、チャレンジしてます。

補足なのですが、バイトデータに変換するメソッド[convertString]を使用しなかった場合(request.getParameter での取得のみ)にはauの携帯では正常に表示できました。
しかし、その他のキャリアやIEでは完全に文字化けしていました。
au用に処理の分岐をさせないといけないのでしょうか。

とりあえず、Etherealをためさせてもらいます。有難うございました。

お礼日時:2005/06/09 21:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!