Bug 反馈:Windows 原生目录选择器对含"需求"等汉字(U+9700 类低字节为 0)的路径截断,附修复补丁 #244
piaomiaoguying
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
问题现象(Bug 反馈)
在 Windows 上使用 Web UI 添加工作区时,原生文件夹选择对话框(IFileOpenDialog)对包含特定汉字的路径会返回父目录,而不是所选目录。例如:
D:\张三\需求→ 对话框返回D:\张三D:\张三\日常\需求1\测试需求→ 返回D:\张三\日常D:\张三\日常等其他目录则完全正常进一步测试发现,路径中含"需求"(
需= U+9700)、"一"(U+4E00)、"开"(U+5F00)、"最"(U+6700)、"言"(U+8A00)等低字节为 0x00 的汉字时都会触发同样的截断。根因
问题不在 Shell 层,而在
packages/host/directory-picker-native/src/win32-dialog-bindings.ts的readUtf16():它以逐字节方式扫描 UTF-16 字符串的终止符,但只检查每个编码单元的低字节:UTF-16 字符串的真正终止符是双字节
00 00。需(U+9700)的 UTF-16LE 编码为00 97——低字节恰好是 0x00,扫描在此处误判为字符串结束,路径被截断在"需"之前。对话框本身始终返回完整路径,路径丢失完全发生在字符串读取环节。修复(已提交)
修改
readUtf16()为双字节终止符检查:已在 Windows 11 上端到端实测:修复后含"需求"的深层路径均可正确选中,workspace 注册路径正确。
补丁位置
fix/directory-picker-native-utf16-truncationb484fdcc8d(仅 1 个文件、1 行改动 + 根因注释)仓库当前禁用了 Pull Requests,故先在此反馈。如需要,我可以按贡献流程提交 PR。
All reactions