- PR -

i-modeの絵文字判定方法

1
投稿者投稿内容
未記入
会議室デビュー日: 2004/07/08
投稿数: 10
投稿日時: 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);
}
}
S-52
会議室デビュー日: 2004/03/02
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 2004-07-25 02:22
うむ〜、これだけの情報だと色々考えますが何ともコメントしようがないかも...
Javaのバージョンや環境まわりの情報が知りたいかな〜と思います。

ちなみにみJava1.4.1以上であればprocessメソッドの

req.setCharacterEncoding("SJIS");

という行がSJISじゃなくてWindows-31Jとなっている必要がると思いますが...
それとその後の行も色々思う事があるのですが、ますは環境情報を教えてくんなまし〜
未記入
会議室デビュー日: 2004/07/08
投稿数: 10
投稿日時: 2004-07-26 09:39
思いつくのは以下ぐらいですが、
他にも環境面で足りない所はありますでしょうか?
因みに編集処理は禁止用語の変換等を行っております。

server Fedora core1
client 携帯端末各種(i-mode)
Java 1.4.2_03-b02
S-52
会議室デビュー日: 2004/03/02
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 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/08
投稿数: 10
投稿日時: 2004-07-27 11:07
情報ありがとうございます。
しかし、文字化けは直りませんでした。
param編集処理までは文字化けがないのですが
絵文字をUnidodeのテキスト入力型(&#x\\\\;)に
変換している部分でうまく行かないようです。
javaの経験が少ないためUnidoceの壁が高く感じます。
未記入
会議室デビュー日: 2004/07/08
投稿数: 10
投稿日時: 2004-07-27 11:08
情報ありがとうございます。
しかし、文字化けは直りませんでした。
param編集処理までは文字化けがないのですが
絵文字をUnidodeのテキスト入力型(&#x\\\\;)に
変換している部分でうまく行かないようです。
javaの経験が少ないためUnidoceの壁が高く感じます。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-27 11:59
引用:

未記入さんの書き込み (2004-07-27 11:07) より:
param編集処理までは文字化けがないのですが
絵文字をUnidodeのテキスト入力型(&#x\\;)に
変換している部分でうまく行かないようです。


「param編集処理」というのはどこからどこまでを指していますか?
その後の変換部分というのはどこからどこまでを指していますか?
期待している結果は何で、どのような結果になっているのですか?

自分が書いていることが他人に伝わるかどうかを意識して質問してください。
S-52
会議室デビュー日: 2004/03/02
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 2004-07-28 06:28
以下のURLをご参照下さい。

http://www.nttdocomo.co.jp/p_s/imode/tag/emoji/e1.html
1

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