mirror of
https://github.com/esengine/DeepSeek-Reasonix.git
synced 2026-11-11 10:01:27 -10:00
DecodeOutput trims a partial rune only at an edge the caller cut. Output that nothing cut but that stops inside a character still has invalid raw bytes, so it went through charset detection and fell back to GB18030, and the whole output turned into mojibake: "编译成功…正在运行" plus half of "中" read as "缂栬瘧鎴愬姛…". This is common in real use: - a process killed on timeout mid-write; - a persistent shell's partial() read; - a block-buffered pipe. The output is now read as UTF-8, less the final incomplete rune, when two things hold: that rune is the only invalid part, and a multi-byte UTF-8 character has already appeared. Both are structural evidence. When only ASCII precedes the half rune, nothing says UTF-8, so the bytes still go through detection. The uncut GBK probes (价, 啊\r\n, ok 洹, 啊 ok) are unchanged. Test: TestDecodeOutputReadsUncutUTF8EndingInPartialRune fails before this change with the mojibake above and passes after it. It also pins ASCII plus half a rune (read as a GBK pair) and uncut, tail-cut and head-cut GBK. Refs #6488