Web上の画面から入力したデータを、サーバー上のデータベースに保存するシステムにおいて、入力(保存)されたデータが文字化けして表示されてしまうことがあります。
具体的には、「~」と入力した場合、再度その画面を呼び出して表示してみると、「?」に文字化けしてしまいます。データベース上は「~」で保存されているのですが、どうもweb上で表示する際に文字化けしているようなのです。
なお、環境は、ブラウザがIE6.0、画面はJSPにて作成、データベースはOracle8です。
文字化けの起こる原因もしくは対策など、ご存知でしたら教えてください。
No.1
- 回答日時:
入力ストリームで日本語は文字化けします。
お約束と思って、<%! %>に以下のような、クラスを準備し、実際のStringオブジェクトに適用すれば、どうでしょうか。
例)String strParam = strEncode(request.getParameter("parameter_name"));
----------------------------------------------------------------
//REQUESTデータの文字化け対策
public String strEncode(String strVal) throws UnsupportedEncodingException{
if(strVal == null){
return (null);
}else{
return (new String(strVal.getBytes("ISO-8859-1"),"Shift_JIS"));
}
}
返事が大変遅くなり、申し訳ありません。
文字の取り扱いについての知識不足のため、勉強しなおしていました。
さて、回答していただいた方法で試してみたのですが、残念ながら同じ結果になりました。
今回の場合、DBのデータを読み込んで画面に表示する段階で文字化けしているらしいことと、現段階では「~」のみ文字化けが起きているようだったので、Shift_JISとMS932での文字コードが異なることによる現象かと思い、以下のような方法を用いることで、とりあえず解決しました。
方法:以下のようなクラスを用意し、文字化けを起こす可能性のある文字に大して適用する。
public static String MojiConv( String s )
{
char[] chr;
chr = s.toCharArray();
for ( int i = 0; i < chr.length; ++i ) {
switch ( (int)chr[i] ) {
case 0x301C : chr[i] = 0xFF5E; break; // ~
default: break;
}
}
return new String( chr );
}
COOKY2さんのご回答は、他の部分でも役立ちそうです。どうもありがとうございました。
No.2
- 回答日時:
"~"が文字化けするのは、Oracle JDBC を使ったプログラムでよくある問題です。
OTNの掲示板のJavaの部屋に過去にいくつか同じ問題があり、回答も出されています。検索してみてはいかかでしょうか?
簡単に言うと、JDBCを使って文字データを取得した
後に、自分で文字コード変換を行う必要があります。
ちなみに、この問題は環境に依存する問題なので、
こう変換すれば必ずうまくいきます、
という答えは存在しません。
参考URL:http://otn.oracle.co.jp/
ご指摘のとおりOTNの掲示板を見たところ、同じような質問がたくさん寄せられており、とても参考になりました。
どうもありがとうございました。
No.3ベストアンサー
- 回答日時:
> "~"が文字化けするのは、Oracle JDBC を使ったプログラムでよくある問題です。
もちろんJDBCも文字化けのよく現れる原因のとつですが、
むしろ参考にされているOracleの場合はそのJDBCドライバが非常に効率よく
エンコードの違いを吸収してくれるような設計がなされているようなので
良くある問題ではないと思います。PostgresやmySQLをLinuxベースと
いうのであればかなり関わってくるとは思いますが・・・
むしろ、COOKY2さんの言われるように入力、出力ストリームにおいてその問題は
顕著に出ると思うのですがどうでしょう??(今回もrespons内で起きているのでは?)
今回もDBCというよりも一般的にあるISO~MS932相互変換の問題だと思います。
それと、この問題は単に文字化けの問題ではなく波線のみ化けるということですよね??
もし、現在「SJIS」で文字コードを設定されているようであれば「MS932」で試して見てください。
一般的には「SJIS」と「MS932」の違いででるようです。
「SJIS」と「MS932」の違いについては割愛させてください。
No.4
- 回答日時:
すみません。
自己レスです。前半、ちょっと怪しいことを書いたようです。
結局のところ変換はいることに違いはないのでストリームだろうがJDBCだろうが
同じことですね。
yujiさん、申し訳ありませんでした。
>今回もDBCというよりも一般的にあるISO~MS932相互変換の問題だと思います。
>それと、この問題は単に文字化けの問題ではなく波線のみ化けるということですよね??
> もし、現在「SJIS」で文字コードを設定されているようであれば「MS932」で試して見てください。
>一般的には「SJIS」と「MS932」の違いででるようです。
MS932でも試してみたのですが、同じように文字化けしてしまいました。
でも、「SJIS」と「MS932」の違いというご指摘のおかげで、いろいろ試してみた結果、なんとか解決しました。
具体的な解決方法は、回答No.1のCOOKY2さんへのお礼のところに載せておきました。
Javaでは(Javaに限らず?)、文字の取り扱いの問題は避けて通れないものなんだと身にしみてわかりました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- Visual Basic(VBA) excel vba でユーザーフォーム入力ができない 2 2022/12/12 14:42
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Windows 10 BitLocker 回復キーの入力 1 2022/10/09 15:23
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
- Evernote Evernote(エバーノート)の文字化け 1 2022/04/05 19:30
- その他(ソフトウェア) powershell で出力したテキストファイルをvim で開くと文字化け 2 2023/01/11 21:39
- HTML・CSS docxをmht形式で保存したファイルをedgeで開くと文字化けする 1 2022/07/29 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaで質問です。 文字列2023/2...
-
int型のゼロ埋め
-
ダブルクォーテーションのrepla...
-
Path型をString型へ変換する(Java)
-
数字を読みに変換する方法について
-
Windows-31Jからutf-8への変換...
-
JavaのStringクラスに「外字」...
-
javascriptで文字列のsjis利用...
-
カタカナをローマジに変換する。
-
文字化けします。
-
UTF-8とUnicodeの互換性
-
VC++にてCString型のフルパスを...
-
なぜか + が半角スペースに変換...
-
C言語32bitから64bitの移行につ...
-
javaで入力したの半角カタカナ...
-
javaの初歩的な質問です。
-
文字コード変換について
-
Visual Studio 6.0でビルド可能...
-
半角の&(アンド)文字をサーブレ...
-
文字列の比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaで質問です。 文字列2023/2...
-
ダブルクォーテーションのrepla...
-
Path型をString型へ変換する(Java)
-
カタカナをローマジに変換する。
-
int型のゼロ埋め
-
javascriptで文字列のsjis利用...
-
byte[] を long,float とかに...
-
C言語32bitから64bitの移行につ...
-
JavaのStringクラスに「外字」...
-
javaの初歩的な質問です。
-
Visual Basic でのコードをASCI...
-
UTF-8とUnicodeの互換性
-
文字列の比較
-
[Javascript]エンターキー押下...
-
下記問題の答えが"D"になる意味...
-
エクセルVBAで「〜」が表現でき...
-
byte配列をImageに変換する
-
javaで「全角が含まれているか...
-
IBM漢字コード⇒SJIS変換方法
-
Windows-31Jからutf-8への変換...
おすすめ情報