Kaomoji Copy and Paste
Every face below copies as plain text. The notes that follow cover where a kaomoji pastes intact, where it arrives mangled, and what to do about it.
Tap any tile to copy it. Nothing is sent anywhere — the copy happens in your browser.
Copy the brackets too
The parentheses are the face. Selecting ´・ω・ without the brackets around it does not give you a kaomoji, it gives you four loose characters. If you are selecting by hand rather than tapping a copy button, start one character to the left of the opening bracket and end one to the right of the closing one, because several faces carry a mark outside the brackets — the sweat in (^_^;) is inside, but the arms in ヽ(・∀・)ノ and the hand in (☞゚ヮ゚)☞ are not.
Nothing has to support them
A kaomoji is ordinary text: brackets, punctuation, and a few letters borrowed from Greek, Cyrillic and kana. There is no kaomoji format to switch on and nothing for a field to implement, so a field that accepts those characters at all hands the face on exactly as typed. What changes a face is a field doing something else to the text on the way through — parsing it as Markdown, checking it against a rule about which characters are allowed, swapping sequences it recognises, storing it in a column that cannot hold every character, or drawing it in fixed-width cells. Those are the cases below.
Where they break, and why
- Markdown eats the punctuation. Where a field parses what you type as Markdown, a backslash is an escape character: it is removed and the character after it is taken literally, so
¯\_(ツ)_/¯arrives as¯_(ツ)_/¯with one arm missing. The fix is to double it: type¯\\_(ツ)_/¯. A pair of underscores or asterisks in the same message can turn the text between them italic, and a>at the start of a line becomes a block quote. The shrug emoticon page works that escaping through in full, because in that face the backslash is doing the job of an arm. - ASCII-only fields. Where a field checks its input against a list of permitted characters — letters, digits and a couple of punctuation marks — anything outside that list is rejected or stripped. If the field in front of you is an identifier — a username, a gamertag, a subdomain, a file name — try a pure-ASCII face first:
(T_T)and(^_^;)pass a check of that kind, and anything with kana, Greek or box-drawing characters does not. - Rich text restyles them. Pasting into a document that carries formatting can drop the face into a proportional font at a different size from the surrounding text. Paste as plain text instead, and the face inherits the paragraph it lands in rather than arriving with formatting of its own.
- Monospace shifts the spacing. Half-width katakana such as
ノ,゚andシare drawn narrow but given a full cell in a code block, so arms and sparkles drift away from the face. If a face has to look right in a terminal, prefer the fullwidth formsノand゜. It shows worst on the wide faces: table flip is built almost entirely from box-drawing characters, and a row of them only reads as a table while every cell keeps the same width. - Databases that store only three-byte characters. A MySQL column declared
utf8rather thanutf8mb4holds at most three bytes per character. Anything outside the Basic Multilingual Plane needs four bytes, so it does not fit — but what happens next is decided by the server’s strict mode rather than by the charset: the write is either rejected outright with an error, or accepted with the text cut short at the character that would not fit. Colour emoji are four-byte characters and run into this. Kaomoji do not: every character in the set above is inside the BMP and fits in three bytes. - Automatic emoji substitution. A client that substitutes graphical smileys rewrites sequences such as
:-)and:3into an icon as you type. The swap is keyed to the exact sequence, so a face that does not match one is left as text, and putting another character beside a face that does match leaves that one as text too.
Length limits are counted differently in different fields
A field that caps a display name or a bio at some number of characters still has to decide what a character is, and there is more than one answer available to it. A field counting Unicode code points counts each one once. A field counting UTF-16 code units charges two for anything outside the Basic Multilingual Plane. A field counting grapheme clusters charges one for a base letter and every combining mark stacked on it together. The Lenny face shows the spread plainly: it is a short row of visible marks, several of them combining, so the same face can measure as one length in one field and a very different one in the next. There is no number worth memorising here — paste the face in and watch the counter.
Screen readers have only the characters
A face carries no text alternative — there is nothing to it but the characters themselves — so a screen reader set to announce punctuation has only those to read out, one at a time. A face at the end of a sentence is a short interruption; the same face in the middle of one breaks the sentence in half.
Keeping one to hand
If you use the same face daily, stop re-copying it. Where your device offers text replacement or a personal dictionary, store the face against a short trigger you would never type by accident and let the keyboard expand it. Where an input method carries a kaomoji list of its own, the faces are already grouped there by mood.
The full set by mood is indexed at the kaomoji hub. Larger pieces are at text art, and the sideways :-) tradition is at ASCII emoticons.