[BUG] BMP Private Use Area Unicode characters (U+E000-U+F8FF) silently stripped from tool I/O
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report
- [x] I am using the latest version of Claude Code
What's Wrong?
Claude Code silently strips all Unicode characters in the BMP Private Use Area range (U+E000-U+F8FF) from tool inputs and outputs. This makes it impossible to read, write, or edit files containing these characters without data loss.
Characters in the Supplementary PUA-A range (U+F0000-U+FFFFD) are unaffected.
The most common victim is Nerd Font icons: Powerline, Font Awesome, Devicons, Weather, and Octicons all fall in the filtered range. Material Design Icons (U+F0000+) work fine. This is a major issue when editing terminal configurations (starship, fish, kitty, WezTerm, etc.).
What Should Happen?
BMP PUA characters should be preserved in tool I/O, just like Supplementary PUA-A characters already are. Reading a file and writing it back should not lose data.
Steps to Reproduce
- Create a test file with both BMP and Supplementary PUA characters:
``bash``
printf 'BMP PUA U+E0A0: \uE0A0\nSupp PUA U+F0A9E: \U000F0A9E\n' > /tmp/pua-test.txt
- Ask Claude Code: "Read
/tmp/pua-test.txtand write it back to/tmp/pua-roundtrip.txtunchanged" - Compare:
``bash``
diff <(xxd /tmp/pua-test.txt) <(xxd /tmp/pua-roundtrip.txt)
- Result: U+E0A0 (bytes
ee 82 a0) is missing from the round-trip. U+F0A9E (bytesf3 b0 aa 9e) is preserved.
The exact boundary: every codepoint in U+E000-U+F8FF is stripped. U+F0000+ is preserved.
Error Messages/Logs
No error is shown. Characters are silently dropped — no warning, no placeholder, just data loss.
Is this a regression?
No, this never worked.
Claude Code Version
2.1.92 (Claude Code)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Other (Ghostty)
Additional Information
Previously reported as #9907 (auto-closed due to inactivity, not because it was fixed). My investigation and workaround are documented in that issue's comments.
Workaround plugin using placeholder syntax ({{U+E0A0}} / {{nf-pl-branch}}) and PostToolUse hooks for automatic conversion: pua-unicode plugin
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗