jim800121chen
f62141a925
fix(bridge): Windows 上中文標籤與 log 亂碼
使用者截圖標籤顯示「撣�」而非「布」。實證:布 的 UTF-8 位元組
e5 b8 83 用 cp950 解碼正好得到「撣�」。
根因是 bridge 的 stdio 綁在系統 ANSI code page(繁中 Windows = cp950),
而非 UTF-8。兩個方向的表現不同:
- Go → Python(stdin):Go 的 json.Marshal 不 escape 非 ASCII,送出的是
原始 UTF-8,Python 卻用 cp950 解碼 → 標籤壞掉。這是實際的損壞路徑。
- Python → Go(stdout):json.dumps 預設 ensure_ascii=True 會轉成 \uXXXX,
所以碰巧沒事 —— 但那是巧合不是設計。
同一根因也造成 log 的「(source: declared) �X SDK did not report」,那個
�X 是程式碼裡的 em dash 編碼失敗。
修正兩層,各自不可省:
1. kneron_bridge.py 在 module import 時強制 stdio 為 UTF-8(早於任何 I/O,
import 期間的 traceback 也涵蓋),並在 os.fdopen 明確指定 encoding
—— 那是 JSON-RPC 回應通道,reconfigure() 碰不到它,目前只靠
ensure_ascii 巧合存活。errors="replace" 是刻意的:bridge 崩潰會讓裝置
離線,比一個壞字元嚴重得多。
2. kl720_driver.go 加 PYTHONUTF8=1。實測 PYTHONIOENCODING 只影響 sys.stdin、
PYTHONUTF8 才管得到 os.fdopen 與 locale.getencoding(),單一層都不夠。
Go 端 stdout scanner 不需改(bufio.Scanner 是 byte-oriented,不做轉碼)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 02:00:16 +08:00
..
2026-04-11 22:10:38 +08:00
2026-05-25 08:10:46 +08:00
2026-07-23 02:00:16 +08:00
2026-04-11 22:10:38 +08:00
2026-07-22 23:41:19 +08:00
2026-07-23 02:00:16 +08:00
2026-05-25 11:27:36 +08:00