- PR -

JSPのテキストformからの日本語入力の文字化け

投稿者投稿内容
ぎんが
常連さん
会議室デビュー日: 2003/09/09
投稿数: 24
投稿日時: 2004-04-28 10:19
WindowsにてJSPのテキストのformに入力した日本語を
サーバー(Linux)でテキストファイルに保存したところ
日本語入力を行った文字が???????に化けて保存されます。
対策を教えていただけないでしょうか。
よろしくお願いいたします。

ちなみに両方のページのデリバティブには以下を指定しています。
contentType="text/html; charset=Shift_JIS"

また、テキストファイル保存のプログラムには以下を記述しています。
<%!
public String strEncode(String strVal, String encode) throws java.io.UnsupportedEncodingException{
if(strVal==null){
return (null);
}else{
return (new String(strVal.getBytes("ISO-8859-1"),encode));
}
}
%>

<%
FileWriter fw=new FileWriter(application.getRealPath(strNam),true);
BufferedWriter bw=new BufferedWriter(fw,10);
StringBuffer sb=new StringBuffer();
sb.append(strEncode(strStory,"JISAutoDetect"));sb.append("\t");
bw.write(sb.toString());
bw.newLine();
bw.close();
%>
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-04-28 11:14

String test = new String(temp.getBytes("8859_1"), "shift-jis");

これはどうでしょう。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-04-28 12:28
引用:

ぎんがさんの書き込み (2004-04-28 10:19) より:
WindowsにてJSPのテキストのformに入力した日本語を
サーバー(Linux)でテキストファイルに保存したところ
日本語入力を行った文字が???????に化けて保存されます。
対策を教えていただけないでしょうか。


そもそもLinux上でどのような文字コードで保存されることを想定されているのでしょうか。

まず、
<%
FileWriter fw=new FileWriter(application.getRealPath(strNam),true);
BufferedWriter bw=new BufferedWriter(fw,10);
StringBuffer sb=new StringBuffer();
sb.append(strStory);
sb.append("\t");
bw.write(sb.toString());
bw.newLine();
bw.close();
%>
以下のコードで保存してみてください。実行環境のロケールに対応した文字コードで保存される
はずです。これがうまくいかなかったり他の文字コードで保存することを考えているのであれば、
どのような現象になっているか書き込んでください。
ぎんが
常連さん
会議室デビュー日: 2003/09/09
投稿数: 24
投稿日時: 2004-04-28 12:30
教えていただいたように変更したのですが,やはりデータは??????に化けて
テキストファイルに格納されてしまいます.
何か間違っているでしょうか?

String test = new String(strStory.getBytes("8859_1"), "Shift-JIS");
sb.append(test);sb.append("\t");
ぎんが
常連さん
会議室デビュー日: 2003/09/09
投稿数: 24
投稿日時: 2004-04-28 12:50
ukさん
依然変わらず,日本語データ'あいうえおあいうえおあいうえおあいうえおあいうえお’は'?????????????????????'に化けテキストファイルに保存されます.
ぎんが
常連さん
会議室デビュー日: 2003/09/09
投稿数: 24
投稿日時: 2004-04-28 12:55
テキストファイルに保存したデータを,Windows上で利用する予定です.

はじめはWindowsから下記のフォームにデータを入力します.

<textarea name="story" rows="50" cols="300"></textarea>
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-04-28 13:20
引用:

ぎんがさんの書き込み (2004-04-28 12:50) より:
ukさん
依然変わらず,日本語データ'あいうえおあいうえおあいうえおあいうえおあいうえお’は'?????????????????????'に化けテキストファイルに保存されます.


この結果からするとロケールが英語環境のようですね。ロケールに左右されずにエンコーディング
を指定するのであれば、FileOutputStreamとOutputStreamWriterを使いましょう。
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-04-28 13:40
「化ける」なら、化ける前のデータを見てから判断してください。
以前MLなどで発言していたときはよくこういうところを参照して
ください、と回答していたんですが。
|http://java-house.jp/ml/ のスペシャルトピックス
|「文字化け」を報告するときは文字列データのダンプを示してください [j-h-b:27929]

* * *

以下はデータの内容にもよります。

内容としては未記入さんの方法が一般的ですが、(SJISの場合)
正確にはshift-jis じゃ無く、Shift_JIS(大文字小文字ではなく、
ハイフンとアンダーバーの違いが重要) です。
Javaのバージョンによっては shift-jis は無理だった気がします。
(エラーは出ていなそうなので問題ないでしょうが…)

SJISの場合、と書いたのは、送られてくるデータがSJISじゃ無い
可能性があるからです。
パラメータをどのようにエンコードするかはブラウザ次第です。
大体、どうエンコーディングするかは
(1)ページのエンコーディングと同じ。
(2)UTF-8固定
(3)上記(1)(2)を切り替える事ができる
のいずれかです。

最近のブラウザはほとんど(3)だとは思います。
設定により UTF-8 で飛んできている、に1票。

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