- - PR -
i-modeの絵文字判定方法
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-07-23 18:55
getParameterで取得したStringに、
i-modeの絵文字が含まれているか判定を行いたいのですが、 色々と試しても文字化けしてしまい、うまくできませんでした。 どうかアドバイスをよろしくお願い致します。 import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Test extends HttpServlet { protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { process(arg0, arg1); } protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { process(arg0, arg1); } public void process(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req.setCharacterEncoding("SJIS"); String param = req.getParameter("param"); /* param編集処理 */ byte[] buf = param.getBytes("8859_1"); StringBuffer sb = new StringBuffer(); String str = ""; str = new String(buf, "MS932"); for (int i = 0; i < str.length(); i++) { if ((int) str.charAt(i) > 58941 && (int) str.charAt(i) < 59224) { sb.append( "&#x" + Integer.toHexString((int) str.charAt(i)) + ";"); } else if ((int) str.charAt(i) == 65374) { sb.append("\\u301c"); } else { sb.append(str.charAt(i)); } } req.setAttribute("param", sb.toString()); RequestDispatcher rd = getServletConfig().getServletContext().getRequestDispatcher( "/test.jsp"); rd.forward(req, res); } } | ||||
|
投稿日時: 2004-07-25 02:22
うむ〜、これだけの情報だと色々考えますが何ともコメントしようがないかも...
Javaのバージョンや環境まわりの情報が知りたいかな〜と思います。 ちなみにみJava1.4.1以上であればprocessメソッドの req.setCharacterEncoding("SJIS"); という行がSJISじゃなくてWindows-31Jとなっている必要がると思いますが... それとその後の行も色々思う事があるのですが、ますは環境情報を教えてくんなまし〜 | ||||
|
投稿日時: 2004-07-26 09:39
思いつくのは以下ぐらいですが、
他にも環境面で足りない所はありますでしょうか? 因みに編集処理は禁止用語の変換等を行っております。 server Fedora core1 client 携帯端末各種(i-mode) Java 1.4.2_03-b02 | ||||
|
投稿日時: 2004-07-26 20:15
環境情報ありがとう御座います。
Java 1.4.2 であれば、Java 1.4.1以上なので req.setCharacterEncoding("SJIS"); を req.setCharacterEncoding("Windows-31J"); としてみて下さい。 それで、その後の byte[] buf = param.getBytes("8859_1"); を削り str = new String(buf, "MS932"); を str = param; とすればよいような気がします。 現在どの行で化けているか特定できますでしょうか? | ||||
|
投稿日時: 2004-07-27 11:07
情報ありがとうございます。
しかし、文字化けは直りませんでした。 param編集処理までは文字化けがないのですが 絵文字をUnidodeのテキスト入力型(&#x\\\\;)に 変換している部分でうまく行かないようです。 javaの経験が少ないためUnidoceの壁が高く感じます。 | ||||
|
投稿日時: 2004-07-27 11:08
情報ありがとうございます。
しかし、文字化けは直りませんでした。 param編集処理までは文字化けがないのですが 絵文字をUnidodeのテキスト入力型(&#x\\\\;)に 変換している部分でうまく行かないようです。 javaの経験が少ないためUnidoceの壁が高く感じます。 | ||||
|
投稿日時: 2004-07-27 11:59
「param編集処理」というのはどこからどこまでを指していますか? その後の変換部分というのはどこからどこまでを指していますか? 期待している結果は何で、どのような結果になっているのですか? 自分が書いていることが他人に伝わるかどうかを意識して質問してください。 | ||||
|
投稿日時: 2004-07-28 06:28
以下のURLをご参照下さい。
http://www.nttdocomo.co.jp/p_s/imode/tag/emoji/e1.html | ||||
1
