Dim s As String = UTS(0x1F600) & UTS(0x1F601) & UTS(0x1F602) & "a"
Dim cp() As Int = StringToCodePoints(s)
For Each point In cp
Log(IsEmojiCodePoint(point))
Next
Sub IsEmojiCodePoint (cp As Int) As Boolean
Return (cp >= 0x1F600 And cp <= 0x1F64F) Or _
(cp >= 0x1F300 And cp <= 0x1F5FF) Or _
(cp >= 0x1F680 And cp <= 0x1F6FF) Or _
(cp >= 0x1F1E6 And cp <= 0x1F1FF) Or _
(cp >= 0x2600 And cp <= 0x26FF) Or _
(cp >= 0x2700 And cp <= 0x27BF) Or _
(cp >= 0xFE00 And cp <= 0xFE0F) Or _
(cp >= 0x1F900 And cp <= 0x1F9FF) Or _
(cp >= 65024 And cp <= 65039) Or _
(cp >= 8400 And cp <= 8447)
End Sub
Sub StringToCodePoints(s As String) As Int()
Dim b() As Byte = s.GetBytes("UTF-32BE")
Dim bc As ByteConverter
Return bc.IntsFromBytes(b)
End Sub
Sub UTS (codepoint As Int) As String
Dim bc As ByteConverter
Dim b() As Byte = bc.IntsToBytes(Array As Int(codepoint))
Return BytesToString(b, 0, 4, "UTF-32BE")
End Sub