- PR -

機種依存文字のvalidateチェック

1
投稿者投稿内容
優子
常連さん
会議室デビュー日: 2004/03/26
投稿数: 39
投稿日時: 2004-10-29 17:26
こんにちは、優子です。
上記の件について質問があります。

機種依存文字(@、T等)をActionFormのプロパティ(テキストフィールド)に入力し、validate()メソッドにてそれをチェックするロジックを組んでいたのですが、validate()メソッド内でその値を比較する時点で文字化けが発生してしまいます(他の日本語は正常に表示されます)。

コンソールアプリケーションでは上手くいくのですが、servletを用いると化けてしまうようです(request.setCharacterEncoding("Shift_JIS")は設定済み)。

回避策をご存知の方いらっしゃいましたらご返答よろしくお願い致します。

以上です。

開発環境
PC WIN2000
J2SDK 1.4.2_05
TOMCAT 5.0


参考ソース
test3.jsp
<%@ page contentType="text/html;charset=Shift_JIS" %>

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<html:errors />

<html:html>

<body>
<html:form action="/test3Result" >
<html:text property="name" value=""/>
<html:submit value="送信"/>
</html:form>
</body>

</html:html>

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-10-29 17:36
request.setCharacterEncoding() は getParameter() の前に呼び出されていますか?
getParameter() した後に setCharacterEncoding() を呼び出しても遅いです。

その場合はEncodingFilter、
http://java.sun.com/blueprints/code/jps131/src/com/sun/j2ee/blueprints/encodingfilter/web/EncodingFilter.java.html
などを使ったりしてみてはいかがでしょうか。
ホッシー
会議室デビュー日: 2004/10/22
投稿数: 13
投稿日時: 2004-10-29 18:30
ホッシーです。

setCharacterEncoding("Windows-31J");
ではうまくいきませんか?

ただし、JSP側の文字コードの変更は不要だと思います。
IEではWindows-31JをシフトJISと判別しないで、文字化けをした記憶があります。
(ほとんどの場合、自動識別で何とかなるのですが、アルファベットが多いとだめみたいです。)

Javaによる開発で陥る機種依存関係の問題って難しいですよね。ユニコードへの変換テーブルの違いがいろいろで・・・。
あと、@あたりの文字はMACでは別の文字にマッピングされていたかと思います。
携帯電話でも絵文字などでは特殊な文字にマッピングされる例がいろいろあったようです。
(記憶が定かでなくすみません・・・)

このあたりがまとまっているサイトご存知の方いらっしゃいますか?

1

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