- PR -

改行コードが認識できない?

投稿者投稿内容
トラジャ
ベテラン
会議室デビュー日: 2002/12/05
投稿数: 75
投稿日時: 2003-02-26 14:53
お世話になります。

クライアントが作成したFlashの送信フォームから送られたデータを、こちらが作成した
システムで処理してJSPで表示するというシステムを開発しているのですが、送信フォーム
のテキストボックスに適宜改行を挿入して送信しても、その改行が結果に反映されないで
困っています。

なお、この現象は、IEで送信したときだけ生じるもので、Operaだと正しく改行されて
表示されます。(NetscapeにはFlash部分が対応していません)

例えば、テキストボックスに以下のように入力しても、

適当な文字列に
改行を挿入して
入力しても
改行されないで表示する

↓のように全く改行が反映されません。
適当な文字列に改行を挿入して入力しても改行されないで表示する

このとき、IEのフォームから送信されるパラメータの内容は以下のようになっています。
commentという名前のパラメータ部分が問題となっているパラメータです。

http://www.xxxxxx.jp/regist?function=regist&comment=適当な文字列に改行を挿入して入力しても改行されないで表示する

また、Operaのフォームから送信されたパラメータの値は、同じ文字列でも異なっています。
http://www.xxxxxx.jp/regist?function=regist&comment=%93K%93%96%82%C8%95%B6%8E%9A%97%F1%82%C9%0D%89%FC%8Ds%82%F0%91}%93%FC%82%B5%82%C4%0D%93%FC%97%CD%82%B5%82%C4%82%E0%0D%89%FC%8Ds%82%B3%82%EA%82%C8%82%A2%82%C5%95\%8E%A6%82%B7%82%E9%0D

システムでは、Flashのフォームから送られたパラメータをサーブレットでString型で受け
取って、文字化け処理をしてから、そのままDBに保存しています。改行コードを抜き出す
等の処理はしていません。また、DBに保存したデータは同じくString型で取り出し、
JSPで表示していますが、その際、<pre>タグでStringの内容をそのまま表示するようにして
います。ですから、データに改行コードが含まれていれば、改行されて表示されるはずなの
ですが。

クライアントからは、Java側でFlashの送信したデータの改行コードを認識できていないと
主張されているのですが、そんな話は聞いたことがありません。ちなみに、Flashの最新版
では文字コードをUTF-8形式で送信しているそうですが、Flashについてはこちらは専門外
ですので良くわかりません。

パラメータの文字化け処理に問題があるとも思えないのですが、参考までにその処理を
以下に示します。サーブレットで受け取ったパラメータの値を引数で渡し、文字化け処理
をした文字列を戻り値として返します。

public static String Encoding(String str)
{
if(str != null)
{
try
{
if(character == null)
{
character = "iso-8859-1";
}
String param = str;
param = new String(param.getBytescharacter), "Shift_JIS");
return param;
}
catch(Exception e)
{
System.out.println("エラー:" + e);
return str;
}
}
else
{
return null;
}
}

上記の処理で、改行コードが認識できなくなることがあるのでしょうか。また、
文字コードによっては、Java側で改行コードを認識できないということがあるのでしょうか。

どなたか、教えてください。よろしくお願いします。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-02-26 17:10
こんにちは。
改行コードは一般的に
Windows : \r\n
Unix系 : \n
Mac   : \r
です。

その送信データは \r でした。
\rを<br> にかえれば改行できました。
トラジャ
ベテラン
会議室デビュー日: 2002/12/05
投稿数: 75
投稿日時: 2003-02-26 17:22
引用:

raystarさんの書き込み (2003-02-26 17:10) より:
こんにちは。
改行コードは一般的に
Windows : rn
Unix系 : n
Mac   : r
です。

その送信データは r でした。
rを<br> にかえれば改行できました。



お返事、ありがとうございます。

改行できたデータは、IE側のでしょうか。それともOpera側でしょうか。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-02-26 17:27
説明不足かもしれませんので
コードを書いておきますね。

フォームデータをparamに入れます。
そして、改行コードを<br>に変換してから
Stringオブジェクトをリターンします。
これで改行は一発変換です。
<br>変換でなければ、
append("<br>")のところを
\r\nなどにしてくれればOKでしょう、

StringBuffer filtered = new StringBuffer("");
char c; // 作業変数

if (param == null) {
param = ""; // null なら "" で初期化
}
String input = new String(param.getBytes("8859_1"), "Shift_Jis");


for (int i = 0; i < input.length(); i++) {
c = input.charAt(i); // 1文字取り出し
if (input.charAt(i) == '\r' && input.charAt(i + 1) == '\n') {
filtered.append("<br>");
i++;
} else if ((c == '\r' || c == '\n')) {
filtered.append("<br>");
}
}
return filtered.toString(); // String型を返す
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-02-26 17:28
すれ違ってしまいましたね。泣
確認したのはIEです。
ブラウザが改行コードを壊してしまうことは
ないとおもっております。

Opera特有の問題であれば、私も知らないことなのですけど。。。。

ご参考まで!!
トラジャ
ベテラン
会議室デビュー日: 2002/12/05
投稿数: 75
投稿日時: 2003-02-26 18:19
引用:

raystarさんの書き込み (2003-02-26 17:28) より:
すれ違ってしまいましたね。泣
確認したのはIEです。
ブラウザが改行コードを壊してしまうことは
ないとおもっております。

Opera特有の問題であれば、私も知らないことなのですけど。。。。

ご参考まで!!



参考となるコードまでご提供いただき、本当にありがとうございます。
ご提供いただいたコードの変数"param"に、IE送信時の下記パラメータの値を
入れてみたのですが、<br>に変換されません。

http://www.xxxxxx.jp/regist?function=regist&comment=適当な文字
列に改行を挿入して入力しても改行されないで表示する

今回のように、IEがURLに日本語をそのままの状態で送ってくるときには、
このURLのパラメータはどの文字コードが使われているのでしょうか。

また、クライアントはパラメータに改行コードが含まれているというのですが、
上記のように日本語がそのまま表示されているので改行コードが見えません。
いったい、この文の中でどのような形で改行コードが埋め込まれているのでしょうか。

それが、よくわからないのですが。
うのきち
ベテラン
会議室デビュー日: 2003/02/17
投稿数: 55
投稿日時: 2003-02-26 20:17
本題と関係ないですけど、このコードだと、文字列の最後が'\r'で終わっていると、IndexOutOfBoundsExceptionになりませんか?

> for (int i = 0; i < input.length(); i++) {
> c = input.charAt(i); // 1文字取り出し
> if (input.charAt(i) == '\r' && input.charAt(i + 1) == '\n') {
> filtered.append("<br>");
> i++;
> } else if ((c == '\r' || c == '\n')) {
> filtered.append("<br>");
> }
> }
> return filtered.toString(); // String型を返す
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-02-26 21:42
たしかにそのコードは tryで囲んでください。

その送信文字列はエンコードして送れない仕様でしょうか。

基本的に日本語処理をする場合でも

\r\nの改行処理はできると思うのですが。

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