The Unicode character ZERO WIDTH JOINER (U+200D) has been banned from Twitch Chat. This document describes an alternate emoji joining scheme.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
Unicode uses the ZERO WIDTH JOINER character to combine multiple emoji into a single pictogram. Many of these combined emoji are not available on Twitch Chat. For example man farmer (👨🌾) consists of:
- MAN
- ZERO WIDTH JOINER
- EAR OF RICE
While on Twitch it renders as:
- MAN
- EAR OF RICE
The solution is quite simple. Encoding the ZERO WIDTH JOINER as another character or sequence of characters, preferably invisible ones. The character that was decided on is U+E0002. It has has no official name, in this document it will be called ESCAPE TAG. Its properties are quite unique:
- It has no glyph.
- It is not a space.
- It is not filtered by Twitch.
Before processing a message the ESCAPE TAG character MUST be replaced with ZERO WIDTH JOINER unless its proceeded with another ESCAPE TAG, in which case it MUST NOT replaced. The suggested regular expression that SHOULD be used for replacing ESCAPE TAG with ZERO WIDTH JOINER is:
(?<!\U000E0002)\U000E0002
Where:
\U000E0002
is ESCAPE TAG
Why are you using a character intended to be assigned as part of a language tag? Does Twitch filter out all Private Use Area characters or something like that?