あなたはどんな絵文字を検出できるようにする必要がある場合は、絵文字のために使用されるすべてのコードポイントを含むリストを作成する必要があります(またはあなたが好きなら、すべての絵文字のリスト)。標準絵文字をカスタムイメージに置き換える目的で作成したthis frameworkで絵文字がどのように検出されたかを見てみるか、my answer to a related questionを見てください。
Objective-CとNSString
タイプで作業している場合は、文字列のunichar
(UTF-16でエンコードされている)をUTF-32互換のフォーマットに変換してから使用する必要がありますコードポイントのリストあなたは偽陽性をしたくない場合は
// Sample text.
NSString *text = @"a ";
// Get the UTF-16 representation of the text.
unsigned long length = text.length;
unichar buffer[length];
[text getCharacters:buffer];
// Initialize array to hold our UTF-32 values.
NSMutableArray *array = [[NSMutableArray alloc] init];
// Temporary stores for the UTF-32 and UTF-16 values.
UTF32Char utf32 = 0;
UTF16Char h16 = 0, l16 = 0;
for (int i = 0; i < length; i++) {
unichar surrogate = buffer[i];
// High surrogate.
if (0xd800 <= surrogate && surrogate <= 0xd83f) {
h16 = surrogate;
continue;
}
// Low surrogate.
else if (0xdc00 <= surrogate && surrogate <= 0xdfff) {
l16 = surrogate;
// Convert surrogate pair to UTF-32 encoding.
utf32 = ((h16 - 0xd800) << 10) + (l16 - 0xdc00) + 0x10000;
}
// Normal UTF-16.
else {
utf32 = surrogate;
}
// Compare the UTF-32 value against your list of code points, and handle.
// Just demonstrating with the code point for .
if (utf32 == 0x1f601) {
NSLog(@"It's an emoji!");
}
}
また、あなたがVariation Selectorsを処理する必要があります、とzero-width joiners場合:あなたはUTF-32値を持っている場合は、ちょうどあなたのリストに対してそれを比較し、それを扱うしかし、あなたが必要ですシーケンスを扱えるようにする必要がありますが、シーケンス内の最初の文字を見るだけで、文字列に絵文字が含まれているかどうかがわかりますので、これ以上は触れません。
可能な複製http://stackoverflow.com/questions/30757193/find-out-if-character-in-string-is-emoji – sbarow