[Bug] Unicode characters render as mojibake on Windows terminals
Bug Description
---
Title: Unicode characters in UI rendering are garbled (mojibake) on Windows terminals
Description:
Claude Code's terminal UI elements (progress bars, spinners,
box-drawing characters, bullets, em dashes, ellipses) display as
mojibake on Windows. This affects all terminal environments on Windows:
VS Code integrated terminal, Windows Terminal, PowerShell, and Command
Prompt.
Environment:
- Claude Code version: 2.1.76
- OS: Windows 11 Home 10.0.26200
- Node.js: v22.21.0
- Shell: Git Bash (bash) within VS Code terminal
- TERM: xterm-256color
UTF-8 configuration (all confirmed correct):
- System codepage (ACP/OEMCP): 65001 (UTF-8)
- Windows Beta UTF-8 support: Enabled
- Console OutputEncoding/InputEncoding: UTF-8
- System locale: ja-JP
- LANG: en_US.UTF-8
Symptoms:
- Unicode characters used in the TUI (━, ·, …, →, ─, █, etc.) are
displayed as sequences like â€", •, …, · — this is the classic
pattern of UTF-8 bytes being decoded as Windows-1252/Latin-1
- Affected areas: agent status bars, progress indicators
("Wrangling…"), thinking duration display, tool call headers, all
decorative UI elements
- Actual text content (code, responses, English/Japanese text) renders
correctly
- The issue occurs consistently, not intermittently
Steps to reproduce:
- Install Claude Code on Windows 11 (with UTF-8 beta enabled)
- Run claude in any terminal
- Ask a question that triggers extended thinking (e.g., use a model
with thinking enabled)
- Observe the UI chrome around tool calls and status indicators
Expected behavior:
UI elements should render Unicode characters correctly (progress bars,
spinners, box-drawing characters).
Actual behavior:
All multi-byte Unicode characters in UI elements are corrupted,
displaying as mojibake (UTF-8 bytes misinterpreted as CP1252).
Workaround:
Running Claude Code inside WSL avoids the issue entirely, confirming
the problem is specific to the Windows native terminal rendering
pipeline in Claude Code.
Possibly related issues: #9723, #6094, #29699, #31295
---
Environment Info
- Platform: win32
- Terminal: vscode
- Version: 2.1.76
- Feedback ID: cbf5d0e2-d372-475a-b31f-f0f7edc68f8e
Errors
[]
15 Comments
Seeing the same class of issue on v2.1.81 (Windows 11 Home 10.0.26220, VS Code integrated terminal, Git Bash).
Additional observations that may help narrow the cause:
/resume) in a new terminal reproduces the garbled output. The corrupted state appears to be in the session history, not the terminal.Environment:
Concrete Reproduction: Box-Drawing Table Corruption on Paste (v2.1.89, Windows)
Still occurring on v2.1.89. Here's exactly what happens:
Step 1: Claude Code generates a table with box-drawing characters in Window A:
Step 2: Copy that output and paste into Window B's prompt. Result:
Every box-drawing character (U+2500-U+257F) and every em dash (U+2014) is corrupted. The UTF-8 bytes are being interpreted as Windows-1252/CP1252.
Also corrupts:
—(em dash) →ΓÇö–(en dash) →ΓÇô≥(greater-equal) →ΓëÑImpact for multi-agent workflows: When Agent A produces a formatted table and the user pastes it into Agent B's window for review, the table is unreadable. This breaks cross-agent communication in any workflow involving structured output.
Environment: v2.1.89, Windows 11, PowerShell / Windows Terminal, clipboard copy-paste between two Claude Code windows.
Note: v2.1.89 fixed CRLF doubling and Devanagari truncation on Windows, but this clipboard encoding issue remains.
Still broken on v2.1.90 (April 2, 2026). No encoding/Unicode fixes in the v2.1.90 changelog. Box-drawing characters (─│├┤┌┐└┘), em dashes (—), en dashes (–), and ≥ symbols still corrupted to CP1252 mojibake (ΓöÇ, Γöé, ΓÇö, ΓëÑ) when pasting between Claude Code windows on Windows.
Clarification on reproduction path: the table renders correctly in the originating Claude Code window. The corruption happens specifically on the clipboard copy-paste path BETWEEN windows.
Exact flow:
This means the rendering pipeline is fine. The bug is in how Claude Code's terminal output hits the clipboard — either the terminal's copy operation is encoding as CP1252 instead of UTF-8, or Claude Code's alt-screen/Ink rendering is writing bytes that the terminal clipboard handler misinterprets.
This is the primary workflow for multi-agent orchestration: copy results from one agent, paste into another for review. It's broken end-to-end on Windows.
Still broken on v2.1.91 (April 2, 2026). Third consecutive release with no fix.
v2.1.89 — broken
v2.1.90 — broken
v2.1.91 — broken
Nothing in any of these changelogs addresses clipboard encoding on Windows. The UTF-8 to CP1252 mojibake still corrupts every box-drawing character, em dash, en dash, and ≥ symbol when pasting between Claude Code windows.
This is the primary workflow for multi-agent orchestration: Agent A produces structured output, user copies it, pastes into Agent B for review. It's been broken for at least 3 releases and there's been zero acknowledgment from Anthropic on this thread.
Can we at least get a response on whether this is being tracked internally?
v2.1.92 — still broken. That's five consecutive releases with no fix and zero responses from Anthropic on this thread. UTF-8 to CP1252 mojibake on paste between windows persists. Box-drawing characters, em dashes, en dashes all corrupted. This is not a fringe use case — it's the core multi-agent copy/paste workflow broken on Windows.
Five Releases. Zero Fixes. Zero Responses.
v2.1.89 — broken
v2.1.90 — broken
v2.1.91 — broken
v2.1.92 — broken
Not a single entry in any of these changelogs addresses clipboard encoding on Windows. Not a single response from an Anthropic engineer on this thread.
This is not an edge case. This is the core multi-agent copy/paste workflow: Agent A generates output, user copies it, pastes into Agent B. Every box-drawing character, em dash, and mathematical symbol is destroyed in transit. Tables become unreadable. Results can't be shared between windows.
Claude Code is built around multi-agent workflows. The copy/paste path between those agents is broken on Windows. Five releases. No acknowledgment. No ETA. Nothing.
What does it take to get a response on a Windows bug?
Cross-referencing the full Unicode bug cluster on Windows
For anyone triaging: this is not an isolated report. There are at least three open issues describing the same UTF-8 → CP1252 clipboard corruption on Windows, none of which have received a response:
All three: open, unacknowledged, unfixed across v2.1.89 → v2.1.90 → v2.1.91 → v2.1.92.
The specific workflow that is broken: Claude Code Agent A generates a table with box-drawing characters. User copies output. Pastes into Agent B. Every character above ASCII 127 is corrupted. This is not a niche use case — it is the default way users share results between agent windows.
The fact that three separate issues describe the same problem with no cross-referencing or triage suggests this hasn't been looked at. Tagging all three here so they can be consolidated and actually addressed.
Still broken on v2.1.94 (upgraded yesterday, Apr 7). This is now confirmed across 6 consecutive releases: v2.1.89, v2.1.90, v2.1.91, v2.1.92, v2.1.93, v2.1.94.
v2.1.94 shipped 'Fixed CJK and other multibyte text being corrupted with U+FFFD in stream-json input/output when chunk boundaries split a UTF-8 sequence' — that fix is for a different code path (stream-json chunk boundaries). The clipboard UTF-8 → CP1252 encoding bug on Windows is untouched.
What I'm seeing on v2.1.94: CLI output containing status icons renders as
Γ£╗andΓ¥»in the terminal — not just clipboard paste, but the raw output stream is now also corrupted. That is regression on top of regression.Reproduction is trivial: run any agent on Windows that generates output with non-ASCII characters (checkmarks, arrows, box-drawing, em dashes). Every character above ASCII 127 is mangled. This affects every Windows user running multi-agent workflows.
6 releases. Zero acknowledgment. Zero ETA. The label says
has repro— someone confirmed it reproduces. What is the triage status? Is this assigned? Is there a milestone? At minimum, a 'we see this, it's in the queue' response would be better than silence.CONFIRMED FIXED on v2.1.97.
The v2.1.97 changelog entry 'Fixed Korean/Japanese/Unicode text becoming garbled when copied in no-flicker mode on Windows' addressed this. Verified working on Windows 11 Pro x64 with CLAUDE_CODE_NO_FLICKER=1 — box-drawing characters, em dashes, and status icons are no longer corrupted on copy/paste between agent windows.
After 6 consecutive broken releases (v2.1.89 through v2.1.92), this is finally resolved. The fix was specifically scoped to NO_FLICKER mode on Windows, which is the configuration where the corruption was most severe.
For me, on Windows, installing via npm (npm install -g @anthropic-ai/claude-code) seems to have resolved the mojibake issue, while the bundled installer reproduces it.
System is:
Windows 11 25H2
Node v24.4.1.
The bundled Node runtime appears to handle multibyte UTF-8 stdout differently than the system Node when writing through ConPTY.
---
Claude CLI Mojibake on Windows — Debugging Log
What actually fixed it
npm install -g @anthropic-ai/claude-codeinstead of the bundled.exeinstaller. The bundled Claude installer ships its own Node.js runtime, which has broken multibyte UTF-8 stdout handling through ConPTY. Using the system Node (v24.4.1) fixed it.Things that did NOT fix it
Terminal emulator changes
Shell changes
winpty claudewrapper inside Git BashFont changes
Code page / encoding
chcp.com 65001to.bashrcchcp 65001to PowerShell profile[Console]::OutputEncoding = UTF8in PowerShell profile[Console]::InputEncoding = UTF8in PowerShell profile$OutputEncoding = UTF8in PowerShell profilesetx LANG en_US.UTF-8as Windows user env varexport LC_ALL=en_US.UTF-8in.bashrcexport LESSCHARSET=utf-8in.bashrcexport PYTHONIOENCODING=utf-8in.bashrcMSYS2 runtime
setx MSYS enable_pcon(system env var)MSYS=enable_pconin Tabby Git Bash profilemsys-2.0.dllwith coworker's 3.5.4 version (from Git 2.47.0)Claude Code env vars / settings
CLAUDE_CODE_NO_FLICKER=1NO_COLOR=1TERM=dumbfrom Claude's env settingsprintf '\033[m\033[?25h')Git config
core.pagerfromless -rtoless -rFX(prevent alt screen buffer)Windows
Still reproducing on v2.1.110 (2026-04-16)
Original reporter here. This bug is still present on the latest version. Updating my environment details:
Environment
Observations
Additional note
NODE_OPTIONS=--encoding=utf-8 is set in my environment (attempted workaround), but this is not a valid Node.js flag and has no effect on the issue. The bug occurs with or without it.
This has persisted across multiple Claude Code versions (reported initially on 2.1.76, now confirmed on 2.1.110). The root cause appears to be in how Claude Code's TUI pipeline writes Unicode bytes to the Windows console — likely a missing explicit UTF-8 encoding declaration in the Ink/React-based renderer's stdout stream, causing Windows to fall back to a legacy codepage interpretation for the raw bytes.
Still reproducing on v2.1.132 (standalone binary,
~/.local/bin/claude.exe).Environment
claude.exe)Observations
chcp, but the underlying system code page remains legacy Western European. This may be a contributing factor: Claude Code's TUI renderer may be relying on the system ACP rather than the console code page when writing multibyte characters.Additional data point
One commenter above reported that installing via
npm install -g @anthropic-ai/claude-code(using system Node) fixed the issue while the standalone binary reproduces it. I'm using the standalone binary — this is consistent with the theory that the bundled Node runtime in the standalone installer handles multibyte UTF-8 stdout differently through ConPTY.I'm using Claude Code through VSCode and am still having this issue. I spent 3 hours last night trying to find 'em all and still missed some.
<img width="266" height="136" alt="Image" src="https://github.com/user-attachments/assets/38d36915-2287-4141-9c0d-f7fccebbca08" />
Node.js version is
v24.15.0.This is the 3rd PR I've gotten with a bunch of character changes:
https://github.com/Sawtaytoes/mux-magic/pull/109/changes
<img width="1170" height="781" alt="Image" src="https://github.com/user-attachments/assets/3d2922a6-4db5-48ae-9d22-dc09344a0e93" />
I'm burning tokens trying to fix this. If I could at least run a program to fix these characters, that'd at least mitigate the issue.
I don't even understand why it's happening. Claude is horrible at fixing it. I even killed a whole branch and had Claude start over, but it _still_ did the same thing. There must be something in some of my prompts causing this issue because it's inconsistent.
.editorconfig is utf-8 as are other tools. I have Biome installed. Is it possible running
biome formatoreslint --fixis the cause?This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.