fix(encoding): UTF-8 prozess-global + 16-KB-StreamReader für CLI-Output

Zwei zusätzliche Härtungen gegen intermittierende �-Replacement-Chars
(Umlaute, Em-Dash) im CLI-Output unter Windows:

- Program.cs: Auf Windows Console.OutputEncoding/InputEncoding = UTF-8
  setzen. Wirkt prozess-global via Win32 SetConsoleOutputCP/SetConsoleCP
  und wird von direkt gestarteten Child-Prozessen geerbt – ergänzt den
  bestehenden chcp-65001-cmd-Wrapper. In try/catch, falls als Windows-
  Dienst ohne Console gestartet.
- ClaudeCliService.cs: stdout-Lesen mit eigenem StreamReader (16-KB-
  Buffer, explizit UTF-8 ohne BOM-Detection) statt Default-Reader (1 KB).
  Verhindert, dass bei gefragmentierten Pipe-Reads Multi-Byte-UTF-8-
  Sequenzen über Buffer-Grenzen aufgesplittet werden und der Decoder
  den State verliert.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
MelekiandClaude Opus 4.7 committed 2026-04-26 16:12:24 +02:00
1 parent bfd550e090
commit e75c4370fd
2 files changed
+25 -1

No files matched your search

+15
View File
@@ -3,6 +3,7 @@ using System.IO;
using System.Net;
using System.Net.Http;
using System.Runtime.InteropServices;
using System.Text;
using Gott.Endpoints;
using Gott.Middleware;
using Gott.Services;
@@ -13,6 +14,20 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
// Auf Windows: Console-Codepage des Server-Prozesses auf UTF-8 erzwingen.
// Wirkt prozess-global (Win32 SetConsoleOutputCP/SetConsoleCP) und wird von
// direkt gestarteten Child-Prozessen geerbt – damit Tools/Sub-Prozesse, die
// die Console-Codepage abfragen, UTF-8 als Output-Encoding nutzen.
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
try
{
Console.OutputEncoding = Encoding.UTF8;
Console.InputEncoding = Encoding.UTF8;
}
catch { /* In Service-Kontexten ohne Console kann das werfen – ignorieren. */ }
}
var builder = WebApplication.CreateBuilder(args);
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))