今回はunicodeを使って絵文字を弾く方法についての紹介です。
c#で絵文字の判定をする際、簡単にできる方法としてはサロゲートペア文字かどうかで判別する方法があります。
ですが、この方法はかなり不正確で大まかには絵文字を弾くことができますが、一部絵文字は弾けず、記号など絵文字ではない文字も弾かれてしまうといったことが発生します。
ですので、完璧に絵文字を弾くといった処理を書くには非常に難しいです。
今回は、絵文字を弾く1つの方法として、unicodeを使い弾く方法について記載します。
弾きたい絵文字のunicodeの一覧を作り、その一覧に含まれているか含まれていないかで判定をするといった処理となっています。
実際のコードがこちらです。
List<string> emojiList = new List<string>() {
// 判定したい絵文字のunicodeを記述
"U+1F600"
};
string text = "判定するテキスト";
UnicodeEncoding unicodeEncoding = new UnicodeEncoding(true, false);
for (int i = 0; i < text.Length; i++) {
char[] c = new char[1] { text[i] };
byte[] encodedBytes = unicodeEncoding.GetBytes(c);
var output = "U+";
for (int j = 0; j < encodedBytes.Length; j++) {
output += string.Format("{0:x2}", encodedBytes[j]);
}
if (emojiList.Contains(output)) {
// 絵文字
} else {
// 絵文字では無い
}
}
全絵文字のunicodeを調べてリストにするというのは現実的ではないので、サロゲートペアでの判定方法とうまく組み合わせてやっていくのが良いのではないかと思っています。