• 締切済み

Javaでフォームの入力時に絵文字をはじきたい

Javaで入力フォームを作成しているのですが、 開発はUTF-8で行い、DBがEUCのため、iPhoneの絵文字を入力されると PSQLExceptionになってしまいます。 org.postgresql.util.PSQLException: ERROR: character 0xee9095 of encoding "UTF8" has no equivalent in "EUC_JP" アプリ側で絵文字があったらエラーを返すか、 DBに登録できるようにエスケープするかしたいのですが、 どのように実装すればよいでしょうか?

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

たとえば○付き数字などの文字もUTF-8にあってEUC-JPには含まれませんが、対策したいのはiPhoneの絵文字だけですか? もし○付き数字をはじくような処理を既に実装してあるならばそれと同じようなことを絵文字に対しても行えばいいと思います。 EUC-JPにマップできない文字があったらとにかくエラーにしたい場合は、CharsetEncoderを使えば検出できます。 import java.nio.*; import java.nio.charset.*; static boolean mappableToEUCJP(String s) { try { CharsetEncoder encoder = Charset.forName("EUC-JP").newEncoder(); encoder.encode(CharBuffer.wrap(s)); } catch (CharacterCodingException e) { return false; // EUC-JPに変換できない文字があった } return true; }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 絵文字の入力・表示について(掲示板)

    PHP/PostgreSQLでの掲示板を作成しているのですが、i絵文字がちゃんと入力されず、『?』マークになってしまいます。DBはEUC_JPで,rawurlencode関数で普通の文字はちゃんと入力され表示も出来るのですが.... DBに入れる前に、『?』になっています... よろしくお願いします。

  • initdbの文字コードと違う文字コードでDB作成

    postgres9.0.4でEUCでinitした環境があります。 initdb --encoding=EUC_JP そこにUTF8のDBを作成したいのですが、以下のようなエラーがでます。 psql -U postgres postgres=# CREATE DATABASE dbname postgres-# WITH ENCODING='UTF8' postgres-# OWNER=dbowner postgres-# CONNECTION LIMIT=-1; ERROR: encoding UTF8 does not match locale ja_JP.eucJP DETAIL: The chosen LC_CTYPE setting requires encoding EUC_JP. 既に運用が始まっているEUCのDBが稼動している状態です。 EUCで初期化したところに後からUTF8のDBを作成する方法はないのでしょうか?

  • PHP フォームからのデータが文字化け

    PHPにて簡単な以下のようなアプリを勉強がてら作っています。 1.登録フォームを表示 2.確認画面表示 3.DB(MySQL)にデータ登録 そこで質問なのですが、フォームから入力し確認画面を表示するときに、フォームから入力した文字が文字化けしてしまいます(正確には文字化けする時としない時があります)。 出力ページはSmartyを使っています。 テンプレートはUTF-8を使っており、テンプレート内の文字は文字化けしません。PHPソースもUTF-8で書いてあります。 各PHPソースには mb_language("uni"); mb_internal_encoding("UTF-8"); mb_http_output("UTF-8"); と記述しています。 DB(MySQL)のテーブルはUTF-8にしてあります。 1点気になるのは、某ホスティングサービス上で作っているのですが、PHPinfoで見てみるとmb_internal_encodingはEUC-JPになっています。 今回UTF-8で作りたいのですがどうしたら良いのでしょうか? 環境は、 Apache 1.3.34 / PHP 4.3.7 / MySQL 4.1.21 です。 アドバイスお願いいたします。

    • ベストアンサー
    • PHP
  • AU絵文字をUTF8->EUCJP-winで文字化け

    初めて質問させて頂きます。宜しくお願い致します。 只今携帯サイトを趣味で開発してるのですが、以下の所で 詰まってしまっています。 [環境] 開発文字コードUTF-8(SBのG3も対応したい為) 保存DB MySql EUCJP フォームから入力された値をDBに保存して、再度読み出したいのですが、 $buf = pack('H*', 'ef82b2'); // AU 絵文字 (ハート) print "ef82b2 -> " . $buf //実機で見た時に絵文字が表示されます $buf = mb_convert_encoding($buf,"eucJP-win","UTF-8"); print "euc -> " . bin2hex($buf) //ここで見ると0x3Fになります $buf = mb_convert_encoding($buf ,"UTF-8","eucJP-win"); print "utf8 -> " . bin2hex($buf)//ここで見ると0x3Fになります 上記のようにeucJP-winに変換した時点でコードがおかしくなっています。 ※DoCoMoの絵文字'ee****'の場合は正常に変換が出来ます。 これはAU絵文字の場合はeucJP-winの文字コード領域?の範囲を超えてるとかそういうことでしょうか?ネットで探して見たのですが、見つかりませんでした。 どうかご教授下さいますようお願い致します。

    • 締切済み
    • PHP
  • ¥を含む文字列を挿入するとエラーとなります

    こんにちわ、よろしくお願いします。 OS:WindowsXP PostgreSQL:8.4.0 DBの文字コードはUTF8で構築しています。 【現象】 文字型のカラムに¥を含んだ文字列を挿入しようとすると以下のエラーになります。 WARNING: nonstandard use of escape in a string literal at character 331 SQL実行中に以下のエラーが発生しました。 ERROR: invalid byte sequence for encoding "UTF8": 0x00 エラーとなるのは例えば「C:\temp\hoge.txt」といった文字列です。 ただし、 「C:/temp/hoge.txt」 「C:\\temp\\hoge.txt」 とした場合は正常に挿入が出来ます。 8.1.11で同じプログラムを動かしているときは問題なく動作していました。 PostgreSQLを最新の8.4.0にバージョンアップしたところ上記のエラーが発生するようになりました。 エンコードの問題かと思い Postgresql.confのclient_encodingを色々設定してみましたが、解決しませんでした。 解決法が見当たらず困っています。 よろしくお願い致します。

  • javaでEUC-JP文字列→UTF-8への変換

    DB内にEUC-JPで保存されているデータを取得して、これをUTF-8文字列として扱いたいです。 phpでいうところの$string = mb_convert_encoding($string, "UTF-8", "EUC-JP"); をjavaで実現したいです。 どのように記述すれば変換できるのでしょうか? 検索しても、数十行もコードを書いて実現しているものばかりで、 シンプルな方法が見つかりません。 javaには難しい処理なのでしょうか…

  • mysql登録時の文字化け

    PHPで作成した登録フォームで入力されたデータをmysqlに登録すると、文字化けというか?になってしまいます。すべての文字を検証したわけではないのですが、どうも環境依存文字が?になってしまうようです。環境依存文字を登録するにはどうしたらいいでしょうか? ちなみに、現在の文字コードは HTMLの<head>の部分に<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> PHP開始時に mb_language("uni"); mb_internal_encoding("utf-8"); mb_http_input("auto"); mb_http_output("utf-8"); ただし、PHPの設定ファイルがさわれないのでPHP使用時の内部文字コードは恐らくデフォルトのEUC mysqlの文字コードとしては、DB,テーブルともにutf8_unicode_ci ファイルの保存形式はutf-8(BOMなし) SQL文のデータ部分にmb_convert_encodingを使用 例: insert into test(test1,test2) values( mb_convert_encoding("テスト1","EUC-JP","UTF-8"), mb_convert_encoding("テスト2","EUC-JP","UTF-8")) よろしくお願いします

    • ベストアンサー
    • PHP
  • 携帯サイトでの文字コード変更

    現在、PHPで携帯サイトを作成しております。DBはPostgreSQL(EUC)です。 登録フォームがあるのですが、ソフトバンク・DOCOMOでは 問題なくできるのですが、auから登録した場合、通知メールの 日本語(入力)部分が文字化け&DBに登録できないという 現象が起きています。 文字コードが原因かと思い、「mb_convert_encoding」を使って $name1 = mb_convert_encoding($name1,"SJIS","auto") のようにしてみたのですが、解決できません。 auでは文字コードの指定か何かが必要なのでしょうか。 お分かりになる方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • メールフォームを入力時に文字化けになる

    先日メールフォームを作成しましたが、ある条件が揃うと入力時に文字化けをおこしてしまいます。 ある条件とはWindows OS でsafariとfirefoxのブラウザを使用しているときのみです。 入力フォームに入力する際に日本語のみ文字化けを起こしてしまいます。 日本語をコピペしたらきちんと送れるのですが、どこにトラブルがあるのでしょうか。 すべてUTF-8で記述していまして PHPのテキストの冒頭には mbstring.language = Japanese mbstring.internal_encoding = utf-8 をつけています。詳しい方、だれか教えてください。

    • 締切済み
    • PHP
  • PHPの文字化け

    PHP4.3.2 Windows2000 PostgreSQL RedHat Linux DBから取得した値をCSVファイルに書き出します。 この時に日本語が文字化けをしてしまうのです。 php.iniの設定を変えれば、良いのでしょうか? 初歩的な質問で申し訳ありませんが、 よろしくお願いします。 php.iniの設定内容 default_charset = "SJIS" mbstring.language = Japanese mbstring.internal_encoding = eucJP-win mbstring.http_input = ASCII,JIS,Windows-31J,UTF-8,EUC-JP mbstring.http_output = Windows-31J mbstring.detect_order = ASCII,JIS,Windows-31J,UTF-8,EUC-JP mbstring.substitute_character = none DBの設定内容 List of databases Name | Owner | Encoding -----------+----------+---------- test | postgres | EUC_JP

    • ベストアンサー
    • PHP