前言¶
在 DeepSeek Harness(DSH)裏打開中文 Windows 常見的 GBK 編碼 .txt、日誌或舊項目裏的 Markdown,側欄往往只顯示「該格式文件暫時無法預覽」。問題不在擴展名或內置渲染器,而是宿主本地文件系統在解碼階段就拒絕了非 UTF-8 字節。若你希望在側欄一次性恢復純文本、Markdown、代碼和表格預覽,又不想讓模型讀寫工具的行爲被誤改,需要在 ctx.fs 這一層做有邊界的回退解碼。下面介紹社區插件 dsh-gbk-text(維護者 kirarikaryuu,分類:客戶端)的做法。
這是什麼¶
dsh-gbk-text 是 DSH 宿主側小插件:當 @deepseek-ai/dsh-fs-local 用嚴格 UTF-8 解碼並拋出 FS_NOT_TEXT 時,在 readText / streamText 上按 GB18030(GBK / GB2312 的超集)回退解碼,仍拒絕明顯二進制內容。修在文件系統縫上,側欄預覽、Markdown、代碼、CSV/TSV 等所有通過 ctx.fs 讀文本的路徑會一起恢復;不寫文件,也不改 app.asar。許可證 MIT;GitHub 倉庫 kirarikaryuu/dsh-gbk-text,目錄頁 skillhub.cn 爲社區收錄,與 DeepSeek / 幻方無官方從屬關係。
問題出在哪¶
DSH 合成文件系統「只認 UTF-8」:TextDecoder("utf-8", { fatal: true }) 遇到非法字節即拋 FS_NOT_TEXT。側欄文檔預覽走 workspaceFiles.read → fs.streamText,渲染尚未開始字節已被拒,界面只剩籠統的「該格式文件暫時無法預覽」。這與 .md / 源碼擴展名無關,純文本、Markdown、代碼表現一致。
核心功能¶
- 先 UTF-8,再 GB18030:先走原實現;僅當錯誤碼爲
FS_NOT_TEXT時讀字節並按配置編碼解碼。UTF-8(含 BOM)與帶 BOM 的 UTF-16 行爲不變。 - 仍判二進制:解碼結果含 NUL 或控制字符過密時保持拒絕,壓縮包、圖片、可執行文件與原生一致。
- 一次註冊、多消費者:文件樹、側欄預覽及依賴
ctx.fs的插件共用同一修復,無需按擴展名搶內置渲染器。 - 默認只啓用 GB18030:避免自動試 Big5 / Shift-JIS 把文件顯示成「像中文」的亂碼;需要時可顯式擴展
encodings。 - 與 dsh-fs-encoding 互補:後者管模型面向的
read/write/edit,本插件只管預覽用的ctx.fs讀取縫,同裝無衝突。
回退讀取上限 8 MiB;更大文件維持原生 UTF-8 拒絕。插件零運行時依賴,不發起網絡請求、不裝子進程依賴,不遮蔽模型工具。
安裝與啓用¶
桌面端可用自帶 CLI 對 desktop profile 安裝(路徑換成本機 DSH 安裝目錄與插件目錄絕對路徑):
& '<DSH 安裝目錄>\resources\runtime\cli\bin\dsh.cmd' plugin --profile desktop add 'C:/path/to/dsh-gbk-text'
確認 bundle 已登記:
(Get-Content "$env:USERPROFILE\.dsh\profiles\desktop\package.json" -Raw | ConvertFrom-Json).dsh.profile.bundles
界面方式:側欄 Plugins → 安裝第三方插件 → 粘貼本插件目錄的絕對路徑。README 說明新裝 bundle 可走 HMR 熱生效,改代碼後才需重啓。
插件以當前 DSH 進程權限運行;安裝前請自行查看倉庫源碼與 MIT 許可證。
配置¶
在 profile 的插件配置中可調整回退編碼清單(示例結構來自 README):
- id: dsh-gbk-text
name: dsh-gbk-text
config:
encodings: [gb18030, big5, shift_jis]
# excludeEncodings: [gb18030]
| 鍵 | 默認 | 作用 |
|---|---|---|
encodings |
[gb18030] |
替換回退清單,順序即優先級 |
excludeEncodings |
[] |
從默認清單去掉項;顯式設置 encodings 時本鍵被忽略 |
不認識的編碼名會被忽略;用 excludeEncodings: [gb18030] 可臨時關掉回退,或從 Plugins 頁卸載。
典型用法與預期效果¶
安裝後無需改前端:打開 GBK 的 .txt,側欄應能顯示正文(README 示例:第一行可見「這是一個 GBK 編碼的文本文件。」),而不再是「該格式文件暫時無法預覽」。寫回仍走原生字節路徑,GBK 文件不會被靜默轉成 UTF-8。
若仍無法預覽,按 README 排查:文件是否超過 8 MiB、是否非 GB18030(可試調整 encodings)、bundle 是否在 dsh.profile.bundles 中、裝完後是否需重啓。
適用場景與注意¶
- 適合:在 Windows + DSH 上日常查看 GBK/GB18030 日誌、配置、舊文檔;希望在側欄用內置 Markdown / 代碼 / 表格渲染器,而不是退化成單獨預覽插件搶擴展名。
- 不適合當作:寫入編碼轉換或「檢測編碼並展示在 UI」——本插件不修寫入,也不在標題欄顯示猜到的編碼。
- 兼容性:README 在 Windows + DSH
0.2.1-rc.5(desktop profile)端到端驗證;CI 使用 Node 20。依賴宿主TextDecoder的 legacy 編碼支持;精簡 ICU 的運行時會跳過不支持的編碼而不會崩潰。 - 已知取捨:短文件在多種舊編碼下字節都合法時可能猜錯;默認 GB18030 優先面向中文 Windows;Big5 / Shift-JIS 需顯式配置。
倉庫提供無依賴單測:node test/verify.mjs(19 項檢查)。
結尾¶
dsh-gbk-text 把 GB18030 回退放在 DSH 文件系統讀取縫,用最小侵入恢復 GBK 文本在側欄的預覽能力,且承諾只讀、不寫。進一步瞭解實現與 FAQ 見 GitHub:https://github.com/kirarikaryuu/dsh-gbk-text;社區目錄:https://www.skillhub.cn/plugins/kirarikaryuu/dsh-gbk-text。