[Feature Request] Workaround VRChat's character mangling #1143

Closed
opened 2026-04-05 16:53:57 +02:00 by MrUnknownDE · 0 comments
Owner

Originally created by @zkxs on 1/30/2023

VRChat likes to mangle characters in bio, status, username, etc..

Here's an actual example I found today. Was trying to find the profile for "Ten.exe". I got the username string "Ten.exe" from the user themself via a Discord message. Searching for Ten.exe results in 0 users found. I eventually found their actual profile via a group they owned, and was confused to see their username is "Ten․exe", seemingly what they'd sent before. Copy/pasting "Ten․exe" back into the search yielded one result.

So clearly there's some BS going on with characters here. At first I suspected the user had intentionally done some evil Unicode look-alike swaps to get their desired username, but apparently VRChat itself mangles all . (U+002E) input, turning it into (U+2024), and VRChat's own search is unaware of this and can't deal with unmangled input.

Honestly this is a problem on VRChat's side that they've created for themselves by going with the absolutely bizarre design choice of replacing typical characters with uncommon Unicode look-alikes, and they should deal with this search issue themself. I've created a canny issue to track this, but I fully expect it to get zero attention. However, it may be possible for VRCX to workaround this issue by pre-mangling search strings before sending them over to the https://vrchat.com/home/search/<search term> API.

Finally, it's not just . that gets mangled. It appears to be happening to most, if not all, punctuation characters. This mangling can be reproduced by typing various characters into your bio, then taking the saved bio text and tossing it into a Unicode text analyzer like this one.

*Originally created by @zkxs on 1/30/2023* VRChat likes to mangle characters in bio, status, username, etc.. Here's an actual example I found today. Was trying to find the profile for "Ten.exe". I got the username string "Ten.exe" from the user themself via a Discord message. Searching for [Ten.exe](https://vrchat.com/home/search/Ten.exe) results in 0 users found. I eventually found their [actual profile](https://vrchat.com/home/user/usr_7c0f454d-3f9e-4e22-ba7a-87edba5ee4af) via a group they owned, and was confused to see their username is "Ten․exe", seemingly what they'd sent before. Copy/pasting "[Ten․exe](https://vrchat.com/home/search/Ten%E2%80%A4exe)" back into the search yielded one result. So clearly there's some BS going on with characters here. At first I suspected the user had intentionally done some evil Unicode look-alike swaps to get their desired username, but apparently VRChat itself mangles all `.` ([U+002E](https://unicode-table.com/en/002E/)) input, turning it into `․` ([U+2024](https://unicode-table.com/en/2024/)), and *VRChat's own search* is unaware of this and can't deal with unmangled input. Honestly this is a problem on VRChat's side that they've created for themselves by going with the absolutely bizarre design choice of replacing typical characters with uncommon Unicode look-alikes, and they should deal with this search issue themself. I've created [a canny issue](https://feedback.vrchat.com/bug-reports/p/searching-for-strings-with-punctuation-fails) to track this, but I fully expect it to get zero attention. However, it may be possible for VRCX to workaround this issue by pre-mangling search strings before sending them over to the `https://vrchat.com/home/search/<search term>` API. Finally, it's not just `.` that gets mangled. It appears to be happening to most, if not all, punctuation characters. This mangling can be reproduced by typing various characters into your bio, then taking the saved bio text and tossing it into a Unicode text analyzer like [this one](https://apps.timwhitlock.info/unicode/inspect).
MrUnknownDE added the BugDoneBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugBugDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDoneDone labels 2026-04-05 16:54:19 +02:00
Sign in to join this conversation.
No Label Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done Done
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github/VRCX#1143