From 3716deb16c9ef247577c0a96888b01977c57a736 Mon Sep 17 00:00:00 2001 From: "Wenqiang.Xu" Date: Fri, 8 May 2026 21:19:24 +0800 Subject: [PATCH] fix: use platform-aware UTF-8 locale fallback for PTY (#1137) C.UTF-8 does not exist on macOS, causing the terminal to fall back to ASCII encoding when LANG is unset. Use en_US.UTF-8 on macOS and C.UTF-8 on Linux. Also set LC_CTYPE with the platform-appropriate value (UTF-8 on macOS, C.UTF-8 on Linux) for additional safety. --- packages/web/server/lib/terminal/runtime.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/web/server/lib/terminal/runtime.js b/packages/web/server/lib/terminal/runtime.js index 2adc37f6..90eada79 100644 --- a/packages/web/server/lib/terminal/runtime.js +++ b/packages/web/server/lib/terminal/runtime.js @@ -121,6 +121,9 @@ export function createTerminalRuntime({ return resolved; }; + const utf8LocaleFallback = process.platform === 'darwin' ? 'en_US.UTF-8' : 'C.UTF-8'; + const lcCtypeFallback = process.platform === 'darwin' ? 'UTF-8' : 'C.UTF-8'; + const spawnTerminalPtyWithFallback = (pty, { cols, rows, cwd, env }) => { const shellCandidates = getTerminalShellCandidates(); if (shellCandidates.length === 0) { @@ -139,7 +142,8 @@ export function createTerminalRuntime({ ...env, TERM: 'xterm-256color', COLORTERM: 'truecolor', - LANG: env.LANG || process.env.LANG || 'C.UTF-8', + LANG: env.LANG || process.env.LANG || utf8LocaleFallback, + LC_CTYPE: env.LC_CTYPE || process.env.LC_CTYPE || lcCtypeFallback, }, };