回答編集履歴

2

15:01のコメントの後で追記

2016/11/01 08:00

投稿

ikedas
ikedas

スコア4352

test CHANGED
@@ -2,3 +2,13 @@
2
2
 
3
3
  どれが絵文字なのかを、文字コードから簡単なルールで知ることはできません。ユニコードコンソーシアムが、[Unicode Emoji Resources](http://www.unicode.org/emoji/#Unicode_Emoji_Resources)でユニコードに登録された絵文字の情報を公開しています。絵文字として扱われそうなユニコードの文字や、字形の表があります。こういったデータを利用して、取り除く文字を決めることができます。
4
4
 
5
+ ---
6
+
7
+ (15:01のコメントの後で追記)
8
+
9
+ 上記情報源の文字のうち、質問者さんにとって絵文字扱いをしたい文字は、単に羅列すればいいです。[コード表](http://www.unicode.org/charts/)で字形を確認して、判断して下さい。しかし、次に説明するように、Emoji Data Fileのemoji-data.txtにあるコードすべてを単純に羅列したのではだめです。
10
+
11
+ たとえば上のファイルに含まれているU+0023 (番号記号) は、普通の文字として扱いたいでしょう。しかし、異体字セレクタがついてU+0023 U+FE0EやU+0023 U+FE0Fとなったときは絵文字らしく表示されるので、このときは絵文字扱いしたいでしょう ([一覧](http://www.unicode.org/emoji/charts/emoji-variants.html))。また、U+200D (ZWJ) で複数の絵文字をつなぐことで別の絵文字を作れます ([一覧](http://www.unicode.org/emoji/charts/emoji-zwj-sequences.html))。これらのようなパターンも含める必要があります。
12
+
13
+ 詳しいルールについて興味があれば、[UTR#51](http://www.unicode.org/reports/tr51/)を見て下さい。
14
+

1

追記

2016/11/01 08:00

投稿

ikedas
ikedas

スコア4352

test CHANGED
@@ -1,4 +1,4 @@
1
- 質問者さんのやりかたは、「UTF-16でサロゲートペアになる文字はすべて取り除く」というものですね。これは、ユニコードでの符号位置がU+10000以降の文字はすべて取り除く」というのと同じですこれらの大半は、使用頻度の低い漢字や古代の文字などで、絵文字ではありません。ただ、もともと使わないから広めに取り除いても実害はないというのなら、構わないですが。
1
+ 質問者さんのやりかたは、「UTF-16でサロゲートペアになる文字はすべて取り除く」というものですね。これは、ユニコードでの符号位置がU+10000以降の文字はすべて取り除く」というのと同じです (これらの大半は、使用頻度の低い漢字や古代の文字などで、絵文字ではありません。ただ、もともと使わないから広めに取り除いても実害はないというのなら、構わないですが)いずれにせよ、絵文字と見なされ得る文字はこのコード範囲だけに存在するわけではないです。
2
2
 
3
3
  どれが絵文字なのかを、文字コードから簡単なルールで知ることはできません。ユニコードコンソーシアムが、[Unicode Emoji Resources](http://www.unicode.org/emoji/#Unicode_Emoji_Resources)でユニコードに登録された絵文字の情報を公開しています。絵文字として扱われそうなユニコードの文字や、字形の表があります。こういったデータを利用して、取り除く文字を決めることができます。
4
4