前言¶
在 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。