- - PR -
全角文字の受け渡しについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-06 12:11
現在、Windowsのローカル環境にてWebアプリを作成し、Linuxに移行して動作を確認をしています。それで、今までローカルにおいてはJSPで作成した入力画面からstrutsのActionFormにて値を受け取ってDBに登録をしていました。
しかし、Linuxの環境上で動かすとSQLExceptionが返って来てしまいました。 それで、調査をした所、JSPの入力画面で全角文字を入力した場合、受け取る際のActionFormではほとんどが空白で入ってしまっています。なかには文字化けをしている箇所もありました。ちなみに半角の場合においてはちゃんとデータが受け取れています。 自分の考えではLinuxの移行にともなって文字コードをShift-JISからeuc-jpに変更したからかなと考えていますが、現在の知識では分かりませんでした。 下記のソースで何か気になる箇所がありましたら教えて頂けますでしょうか。 ローカル環境 WindowsXP Pro J2SE 1.4.2_10 Tomcat 4.1.36 Struts 1.1 サーバー環境 Linux Fedora Cora J2SE 1.4.2_10 Tomcat 4.1.36 Struts 1.1 ================================================================ regist.jsp ================================================================ <%@ page language="java" contentType="text/html; charset=euc-jp" pageEncoding="euc-jp"%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > <html:html xhtml="true"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> </head> <body> <h1>新規登録</h1> <h2>※入力項目は全て必須です</h2> <!--エラー表示用--> <p><html:errors /></p> <!--入力項目--> <html:form action="/inConfirm" method="post"> <dl id="form"> <dt>ユーザーID:</dt> <dd> <html:text property="userId" size="25" maxlength="16" styleId="kentext" styleClass="imeModeDisabledEnglishMath" /> <p>※半角英数字</p> </dd> <dt>ユーザーパスワード:</dt> <dd> <html:text property="userPass" size="25" maxlength="16" styleId="kentext" styleClass="imeModeDisabledEnglishMath" /> <p>※半角英数字</p> </dd> <dt>苗字:</dt> <dd> <html:text property="nameFamily" size="25" maxlength="8" styleId="kentext" styleClass="imeModeOnJapanese" /> <p>※全角文字</p> </dd> <dt>名前:</dt> <dd> <html:text property="nameFirst" size="25" maxlength="8" styleId="kentext" styleClass="imeModeOnJapanese" /> <p>※全角文字</p> </dd> <dt>苗字カナ:</dt> <dd> <html:text property="nameFamilKana" size="25" maxlength="8" styleId="kentext" styleClass="imeModeOnJapanese" /> <p>※全角カナ</p> </dd> <dt>名前カナ:</dt> <dd> <html:text property="nameFirstKana" size="25" maxlength="8" styleId="kentext" styleClass="imeModeOnJapanese" /> <p>※全角カナ</p> </dd> <dt>権限:</dt> <dd> <html:radio property="authority" value="営業" />営業 <html:radio property="authority" value="講師" />講師 <html:radio property="authority" value="マスター" />マスター <html:radio property="authority" value="その他" />その他 </dd> <dt class="hide">遷移ボタン</dt> <dd> <html:submit value="新規登録" styleId="regist" /> </dd> </dl> </html:form> </body> </html:html> ========================================================= ActionForm.java ========================================================= import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import java.io.UnsupportedEncodingException; /** * 更新確認時のアクションフォームクラスです。 */ public class InsertConfirmForm extends ActionForm{ private String autoNum = ""; private String userId = ""; private String userPass = ""; private String nameFamily = ""; private String nameFirst = ""; private String nameFamilKana = ""; private String nameFirstKana = ""; private String authority = ""; public String getAutoNum() { return autoNum; } public String getUserId() { return userId; } public String getUserPass() { return userPass; } public String getNameFamily() { return nameFamily; } public String getNameFirst() { return nameFirst; } public String getNameFamilKana() { return nameFamilKana; } public String getNameFirstKana() { return nameFirstKana; } public String getAuthority() { return authority; } // セッター public void setAutoNum(String autoNum) { this.autoNum = autoNum; } public void setUserId(String userId) { this.userId = userId; } public void setUserPass(String userPass) { this.userPass = userPass; } public void setNameFamily(String nameFamily) { this.nameFamily = nameFamily; } public void setNameFirst(String nameFirst) { this.nameFirst = nameFirst; } public void setNameFamilKana(String nameFamilKana) { this.nameFamilKana = nameFamilKana; } public void setNameFirstKana(String nameFirstKana) { this.nameFirstKana = nameFirstKana; } public void setAuthority(String authority) { this.authority = authority; } //入力チェック public ActionErrors validate(ActionMapping mapping, HttpServletRequest request){ ActionErrors errors = new ActionErrors(); Validate val = new Validate(); //デバック System.out.println("------------------------------------------------"); System.out.println(userId); System.out.println(userPass); System.out.println(nameFamily); System.out.println(nameFirst); System.out.println(nameFamilKana); System.out.println(nameFirstKana); *************************************************************************** ↑この時点で全角で入力した nameFamily,nameFirst,nameFamilKana,nameFirstKanaの値が空白 *************************************************************************** //空欄チェック errors = val.isNotNull("userId", "ユーザーID", userId); errors = val.isNotNull("userPass", "ユーザーパスワード", userPass); errors = val.isNotNull("nameFamily", "苗字", nameFamily); errors = val.isNotNull("nameFirst", "名前", nameFirst); errors = val.isNotNull("nameFamilKana", "苗字カナ", nameFamilKana); errors = val.isNotNull("nameFirstKana", "名前カナ", nameFirstKana); errors = val.isNotNull("authority", "権限区分", authority); //桁数チェック int mojiCount = 18; errors = val.isCountOver(mojiCount, "userId", "ユーザーID", userId); errors = val.isCountOver(mojiCount, "userPass", "ユーザーパスワード", userPass); errors = val.isCountOver(mojiCount, "nameFamily", "苗字", nameFamily); errors = val.isCountOver(mojiCount, "nameFirst", "名前", nameFirst); errors = val.isCountOver(mojiCount, "nameFamilKana", "苗字カナ", nameFamilKana); errors = val.isCountOver(mojiCount, "nameFirstKana", "名前カナ", nameFirstKana); //半角チェック errors = val.isNotZenkaku("userId", "ユーザーID", userId); errors = val.isNotZenkaku("userPass", "ユーザーパスワード", userPass); //全角チェック System.out.println(nameFamily); System.out.println(nameFirst); errors = val.isZenkakuOnly("nameFamily", "苗字", nameFamily); errors = val.isZenkakuOnly("nameFirst", "名前", nameFirst); errors = val.isZenkakuOnly("nameFamilKana", "苗字カナ", nameFamilKana); errors = val.isZenkakuOnly("nameFirstKana", "名前カナ", nameFirstKana); //戻り値設定 return errors; } } [ メッセージ編集済み 編集者: まつじん 編集日時 2006-01-06 12:22 ] | ||||
|
投稿日時: 2006-01-06 13:01
request.setCharacterEncoding("JISAutoDetect");
とか。 | ||||
|
投稿日時: 2006-01-06 15:44
mioさん、ご返答ありがとうございます。
request.setCharacterEncoding("JISAutoDetect"); を試してみましたが駄目でした。 | ||||
|
投稿日時: 2006-01-06 16:46
おそらくフォームからサブミットされてくる文字コードがEUCなのにShift_JISでエンコードしてるせいですね。
setCharacterEncodingにEUC-JPを与えてください。
そもそもこの変更を行う必要がないと思います。Shift_JISのままで動作するはずです。 | ||||
|
投稿日時: 2006-01-06 17:23
Anthyhimeさん、ご返答ありがとうございます。
EUC-JPにおいて試してみましたが、駄目でした。
Linuxについては無知識でしたので最初はShift-JISでやろうと したのですが、Linux側のTomcatにエラーを出されました。 それで、Linuxで調べていたらEUC-JPでアップするようにと書かれていましたので 入力のjspファイルをEUC-JPで試したら表示出きるようになりました。 Anthyhimeさんの言われていることと違いましたら申し訳ありません。 | ||||
|
投稿日時: 2006-01-06 17:42
普通に配備すればJSPの文字コードが何であるかは全く問題ないです。
そのためにEncoding系のディレクティブがあるわけですから。 クラスは文字コードに依存しますが、VMの起動パラメータで利用文字コードを指定したり、コンパイル時に-encodingでクラスの文字コードを指定することができます。
どのような試され方をしていますか? setCharacterEncodingはFilterでStrutsの前に行う必要があります。 | ||||
|
投稿日時: 2006-01-06 18:10
Anthyhimeさん、ご返答ありがとうございます。
どうやら自分の知識不足で間違って意見を受け取っていました。 先ほどまではActionFormの中のValidateメソッドで request.setCharacterEncoding("EUC-JP")をやっていました。 それをFilterクラスを作成し、web.xmlから最初に呼べばいいのでしょうか? | ||||
|
投稿日時: 2006-01-07 01:05
Filterでリクエストの処理開始前にやるのが定石です。 validate()のタイミングではもうHttpServletRequestから パラメータを取得した後なので意味がないのです。 |
1