Androidアプリでの文字コードについて

4,258 views
Skip to first unread message

mine

unread,
Sep 28, 2012, 11:42:46 AM9/28/12
to android-g...@googlegroups.com
いつも参考にさせていただいてます。

現在、以下のようなAndroidアプリを制作中です。
①画面の入力内容をSQLiteに保存
②保存したデータからxmlファイル作成し、外部に連携

ここで文字コードについて不明点が出てきて
調べているのですがわからず、皆様のお力を貸していただきたいです。

1点は、EditTextに絵文字(ハートマーク等)の入力を抑止する方法について。
もう1点は、xmlファイル作成時にUTF-16leへの変換は可能かについてです。

宜しくお願い致します。

Makoto Yamazaki

unread,
Sep 28, 2012, 6:39:19 PM9/28/12
to android-g...@googlegroups.com
zaki です。

・EditTextに絵文字(ハートマーク等)の入力を抑止する方法
getText() してチェックするのではダメなのdしょうか。

・xmlファイル作成時にUTF-16leへの変換は可能か
http://developer.android.com/reference/java/nio/charset/Charset.html
の Guaranteed-available charsets に UTF-16LE があるのでどの端末でも
可能なことが仕様上保証されています。
FileOutputStream を OutputStreamWriter で decorate する際に、
UTF-16LE なCharset を指定すればOKです。


2012/9/29 mine <oya0...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/Ag3y7RRNgzUJ
> にアクセスしてください。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。



--
YAMAZAKI Makoto

mine

unread,
Oct 4, 2012, 12:57:04 PM10/4/12
to android-g...@googlegroups.com
zaki さん
素早い返信ありがとうございます。

そして返信が遅くなってしまい申し訳ありません。


・EditTextに絵文字(ハートマーク等)の入力を抑止する方法
getText() してチェックするのではダメなのdしょうか。

→ さらに質問をしてしまうことになるのですが、getText()した後、どのようにチェックすればいいでしょうか?
なにか絵文字を判別する条件はあるのでしょうか。
申し訳ありません。


・xmlファイル作成時にUTF-16leへの変換は可能か
http://developer.android.com/reference/java/nio/charset/Charset.html
の Guaranteed-available charsets に UTF-16LE があるのでどの端末でも
可能なことが仕様上保証されています。
FileOutputStream を OutputStreamWriter で decorate する際に、
UTF-16LE なCharset を指定すればOKです。

→情報をありがとうございます。
試してみます!

mine

unread,
Oct 5, 2012, 2:06:50 AM10/5/12
to android-g...@googlegroups.com
途中経過報告です。


・EditTextに絵文字(ハートマーク等)の入力を抑止する方法
getText() してチェックするのではダメなのdしょうか。

→ さらに質問をしてしまうことになるのですが、getText()した後、どのようにチェックすればいいでしょうか?
なにか絵文字を判別する条件はあるのでしょうか。
申し訳ありません。

→質問当時はUTF-8の文字コードからならる記号(ハートマーク、チェスの駒とか)と
SPモードメール等で使用するキャリア依存の絵文字とは、区別しておりませんでしたが、
後者のキャリア絵文字のみを入力規制したいです。
 
キーボードからはデフォルトの設定で入力は不可でした(allowEmoji等で変更可)。
ですが、Spモードメールの画面でコピーし、開発アプリのEditTextに張り付けたところ
入力されてしまいました。その後、SQLiteに格納され、さらに再表示も可能でした。

アプリの性格上、ペースト禁止にもできず・・・・

何か、情報がありましたら、ご教授ください。

臼井 和敏

unread,
Oct 5, 2012, 2:57:00 AM10/5/12
to android-g...@googlegroups.com
こんにちは。
かずみんです。
ドコモのSPモードの絵文字コードが、携帯Javaの文字コードと
同じならば、

http://code.cside.com/i-mode/emojimode/

に、コード表が、掲載されています。
ドコモanroidデバイス上で確認なさってみては
いかがでしょうか。
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/v0wBbKgklvkJ

Makoto Yamazaki

unread,
Oct 5, 2012, 9:44:22 AM10/5/12
to android-g...@googlegroups.com
zaki です。

まず禁止したい文字が Unicode のコードポイントでどの文字なのかを明確にして、
getText().toString() した String を一文字ずつチェックするのが一番簡単な方法だと思います。

絵文字は Unicode の BMP に収まらないものもあるので、 String#charAt(int) ではなく
String#codePointAt(int) でコードポイントを取得してチェックする必要があります。

また、取得したコードポイントを Character#isSupplementaryCodePoint(int) に渡して
true が返ってくる場合はサロゲートペアなので次に String#codePointAt(int) を呼び出す際に
値を +1 ではなく +2 する必要があります。

絵文字はUTF-16 のサロゲートペア関連の知識が必要になるのでこのあたりを
しっかり理解したうえで Java の String, Character クラスのメソッドを使ってください。

ざっとぐぐったみて参考になりそうなものをピックアップしてみました。

サロゲートペア(代用対)
http://ja.wikipedia.org/wiki/Unicode#.E3.82.B5.E3.83.AD.E3.82.B2.E3.83.BC.E3.83.88.E3.83.9A.E3.82.A2

Unicode6.0の携帯電話の絵文字の一覧
http://ja.wikipedia.org/wiki/Unicode6.0%E3%81%AE%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AE%E7%B5%B5%E6%96%87%E5%AD%97%E3%81%AE%E4%B8%80%E8%A6%A7

【Unicode 6.1.0】ユニコード6.1に追加された文字・機能関連まとめ
http://matome.naver.jp/odai/2132053311969628601



2012/10/5 mine <oya0...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/v0wBbKgklvkJ
Reply all
Reply to author
Forward
0 new messages