Spent a while thinking my tower climbing game had a real input bug on Android. The crash collector kept getting “invalid utf16 surrogate input”, always two at once
It’s emoji. Characters outside the BMP are two UTF-16 units, and Godot’s Java text input wrapper sends press/release per unit, so a release gets in between the high and low surrogate and android_input_handler.cpp complains. The presses still combine. The emoji goes in fine
so my busiest “crash” was players putting emoji in their name lol
my fault for treating every engine error line as a crash. it’s now just a breadcrumb (last action before a crash) across my 5 Godot games and old build reports are downgraded to lowest severity
edit: the game I’m mostly working on now is a browser life sim, https://playgama.ai/play/7hersnnnxaqs5l
Treating every Godot Android “invalid utf16 surrogate input” line as a crash until you traced it to emoji — a release landing between the high and low surrogate units — is a sharp post-mortem, and demoting those to breadcrumbs across five games sounds like the right severity fix.
Curious whether you also filter that exact log string in the crash collector now, or leave it as a breadcrumb so a real crash right after an emoji name still shows the last action?
Take your slop up your AIss

