Replies: 3 comments
|
这个现象值得查,但光凭"带'销'字"这一条,谁也没法帮你——因为可能的成因至少有三种,而且处置完全不同。下面是能把它们分开的几个问题,都是你那边几分钟就能答的。 先做一个决定性的对照实验建两个文件夹,只差一个字,然后各建一次工作区:
四种可能的结果,指向四个不同的成因:
需要补的信息现在这帖只有一句话加一个问号,没有任何人能据此动手。请补上:
第 4、5 条尤其重要。 这个社区里有一类问题的表现是"点了没反应/闪回去",而后端其实返回了完整的错误信息、只是前端把它扔了(#902 就是这样,那位为此做了一次逆向工程才找到根因)。如果你这条也是这种,那控制台里那一行可能直接就是答案。 一个值得先排除的方向:Windows 中文环境的编码如果你在 Windows 中文版上,那这个方向优先级最高。这个社区里已经有过同环境的编码问题——#2373 报的是中文 Windows 下 python 工具链因为控制台是 GBK 而崩溃( 同一个环境因素(系统默认代码页是 GBK 而不是 UTF-8)也可能影响路径处理:一个中文文件夹名在 UTF-8 和 GBK 之间来回转换时,某些字会转坏或转不回来。如果上面的对照实验显示"部分中文字失败、部分正常",基本就是这一类。 快速自查:把那个文件夹改名成纯英文(比如 我能确定的一件事工作区的位置是可以自己指定的——DSH 的整个数据目录挂在 (这一条我们能确定,是因为我们的自动化回归每次都在一个全新的临时 边界与利益相关我们不修 DSH 自家组件——工作区创建在 DSH 里。我没有复现过你这个现象,也没有在中文 Windows 上跑过 DSH(我在 macOS,路径全是英文),上面全部是排查方向,不是结论。#902 / #2373 是别人的报告。 利益相关:我维护 pi2dsh(Pi 生态兼容层)。这条不推销——这是 DSH 建工作区那一步的事,装什么插件都不改变它。 补完上面那几项,这帖被人接手的概率会高很多。 |
|
是 BUG,而且可以精确解释为什么偏偏是“销”这个字。 原生文件夹选择器在解码返回的路径时,是按 UTF-16LE 扫描 NUL 结束符的,但它只检查每个码元的低字节: while (bytes[end] !== 0) end += 2一个 UTF-16 结束符是整个码元两个字节都为零。而“销”是 U+9500,UTF-16LE 的字节序是 所以这不是“中文路径不支持”,而是“低字节为零的那一类字符不支持”。凡是 顺带说明为什么现有测试没能发现:测试里一直用的是“选”(U+9009,字节 修复就是把判断改成整个码元: while (bytes.readUInt16LE(end) !== 0) end += 2这与 #4624 和 #4648 是同一个根因(那两个是从“混合中英文的文件夹选不了”这个外部现象报上来的)。本地已按上面的方式修好并加了以低字节为零的字符构造的回归用例。 临时规避:把文件夹改名成不含此类字符的名字,或者手动输入路径而不用选择器。 |
|
跟进:你这个问题已经有答案了,而且根因比"中文路径"精确得多。 我上次给你那张四行对照表里的第 3 行("部分中文字失败——把成功与失败的字各列几个"),命中的就是它。#4654 报的是同一件事,并且给出了确切规则: 不是"中文路径不行",也不是"中英混合不行",而是 Windows 原生目录选择器( while (end + 1 < bytes.length && bytes[end] !== 0) end += 2而 UTF-16 的终止符是一整个码元两个字节都为 0。所以「开」(U+5F00,内存字节 这解释了为什么它看起来像"有的中文目录行、有的不行":取决于目录名里有没有 对你的意义:
我上次说了"我在 macOS、路径全英文、从没撞过中文路径问题,帮不上更具体的"——这次能给你确切答案,是因为几天后有人把根因查到了字节层。抱歉让你等了这么久。 利益相关不变:我维护一个第三方 DSH 插件(Pi 生态兼容层),目录选择器是 DSH 自家组件,我们既不碰也修不了,上面全是转述 #4654 里已核证的结论。 |
Uh oh!
There was an error while loading. Please reload this page.
是不是个BUG
All reactions