[其他] 繁體中文 Windows(CP950)下啟動器 --version 編碼失敗,介面誤報「未安裝」
Author: Willy19928Created Sep 21, 2026Updated Sep 21, 2026
LabelsBug | 工作不正常Triage | 待检查
请确认您已完成以下几件事并勾选项目,未按要求勾选可能被认作无效反馈直接关闭
- 正在使用最新的 OneDragon
- 已搜索过 issue 中无人提出相似问题或无解决方案
- 已为所有模型以及战斗脚本更新至最新版
- 已经依照 官方文档 和 常见问题排查 进行过问题自查
- 运行时无任何帧率显示或其他覆盖层窗口遮盖游戏
- 未认真阅读此处选项随意勾选
- 未安装任何修改游戏UI和贴图的模组
- 了解反馈时应携带日志和问题截图,且明白应该使用F11截图
- 已经修改了此issue的标题为想要反馈的问题简述
代码版本
a91a606
问题类型
Bug
问题范围
其他
问题描述
問題描述
在繁體中文 Windows 環境中,專案根目錄已存在 OneDragon-Launcher.exe,而且啟動器可以正常啟動主程式,但資源更新視窗仍顯示:
未安裝 → v2.5.2
問題不是啟動器檔案不存在,而是啟動器執行 --version 時,嘗試向 CP950 編碼的標準輸出寫入簡體中文「绝区零 一条龙 启动器」,因而發生 UnicodeEncodeError。版本查詢回傳空字串後,介面將空版本顯示成「未安裝」。
重現環境
- Windows 顯示語言:繁體中文
- 系統控制台編碼:CP950
- 啟動器路徑:
E:\tools\ZZZ-OD\OneDragon-Launcher.exe - 啟動器檔案確實存在,而且可以正常啟動 GUI
重現步驟
- 在繁體中文 Windows 環境啟動一條龍。
- 等待資源更新檢查。
- 資源更新視窗將已存在的啟動器顯示成「未安裝」。
- 單獨執行
.\OneDragon-Launcher.exe --version。
實際結果
程序結束碼為 1,stdout 為空。啟動器在輸出簡體字「绝」(U+7EDD)時發生 CP950 編碼錯誤。
預期結果
OneDragon-Launcher.exe --version在 CP950、GBK 與 UTF-8 等 Windows 編碼環境中都能穩定輸出版本號並正常結束。- EXE 存在但版本讀取失敗時,應顯示「版本讀取失敗」,而不是「未安裝」。
相關問題
- #2719 已處理管理員相容模式及 PyInstaller 環境造成的誤報,但未涵蓋 CP950 輸出編碼失敗。
- #2786/#2787 處理的是呼叫端解碼啟動器輸出失敗。
- 本問題發生在啟動器輸出階段:程序已經崩潰且
stdout為空,因此只修改呼叫端解碼邏輯無法解決。
游戏截图
运行日志
執行 OneDragon-Launcher.exe --version 的結果:
returncode = 1
stdout = ''
Traceback (most recent call last):
File "launcher.py", line 21, in <module>
File "one_dragon\launcher\launcher_base.py", line 33, in run
File "one_dragon\launcher\exe_launcher.py", line 49, in main
File "one_dragon\launcher\exe_launcher.py", line 23, in show_version
File "colorama\ansitowin32.py", line 210, in write_plain_text
UnicodeEncodeError: 'cp950' codec can't encode character '\u7edd' in position 0: illegal multibyte sequence其中 \u7edd 是簡體字「绝」。
你的建议
--version 是供程式讀取的介面,建議只輸出 ASCII 版本號:
def show_version(self) -> None:
print(self.version)
sys.exit(0)另外建議區分以下狀態:
- EXE 不存在:未安裝
- EXE 存在但
--version失敗:版本讀取失敗 - 成功讀取版本:正常比較版本
Source: OneDragon-Anything/ZenlessZoneZero-OneDragon