Skip to content

Fixes #4848. Set Console.OutputEncoding to UTF-8 in AnsiOutput#4849

Merged
tig merged 7 commits intogui-cs:v2_developfrom
tig:fix/4848-ansi-utf8-encoding
Mar 24, 2026
Merged

Fixes #4848. Set Console.OutputEncoding to UTF-8 in AnsiOutput#4849
tig merged 7 commits intogui-cs:v2_developfrom
tig:fix/4848-ansi-utf8-encoding

Conversation

@tig
Copy link
Copy Markdown
Collaborator

@tig tig commented Mar 24, 2026

The ANSI driver writes UTF-8 encoded bytes via \WriteFile\ but never set the console output code page to 65001 (UTF-8). On a fresh Windows terminal with the default OEM code page (e.g. 437), multi-byte UTF-8 characters (box-drawing glyphs like ╔═╗║╚╝) were misinterpreted as multiple single-byte OEM characters, producing garbled borders and shifted text.

Root Cause

\WindowsVTOutputHelper.Write()\ encodes output as UTF-8 via \Encoding.UTF8.GetBytes()\ and writes raw bytes via \WriteFile. The console interprets those bytes according to its output code page. On a fresh terminal this is the system OEM code page (e.g. 437), not UTF-8.

Why it didn't always repro

  • After running another TG app: The DotNet driver (\NetOutput) sets \Console.OutputEncoding = Encoding.UTF8, which persists.
  • UICatalog: Sets \Console.OutputEncoding = Encoding.Default\ (UTF-8 in .NET 6+) in \Main().
  • Windows/DotNet drivers: Use \WriteConsoleW\ (UTF-16) which is code-page independent.

Fix

Added \Console.OutputEncoding = Encoding.UTF8;\ to the \AnsiOutput\ constructor, matching what \NetOutput\ already does.

tig and others added 7 commits March 9, 2026 06:31
The ANSI driver writes UTF-8 encoded bytes via WriteFile but never set
the console output code page to 65001 (UTF-8). On a fresh Windows
terminal with the default OEM code page (e.g. 437), multi-byte UTF-8
characters (box-drawing glyphs) were misinterpreted as multiple
single-byte OEM characters, producing garbled borders and shifted text.

Added Console.OutputEncoding = Encoding.UTF8 to the AnsiOutput
constructor, matching what NetOutput already does.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@tig tig merged commit ee26f14 into gui-cs:v2_develop Mar 24, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant