From cf6ad4c40789beef8a0f2a07f12964fd5fdd2b09 Mon Sep 17 00:00:00 2001 From: shirukai <308899573@qq.com> Date: Wed, 21 Jan 2026 18:35:23 +0800 Subject: fix: handle special characters in paths and git snapshot reading logic(#9804) (#9807) --- packages/app/src/context/file.tsx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'packages/app/src/context') diff --git a/packages/app/src/context/file.tsx b/packages/app/src/context/file.tsx index 5ea499387..d7630509a 100644 --- a/packages/app/src/context/file.tsx +++ b/packages/app/src/context/file.tsx @@ -195,7 +195,20 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({ const root = directory() const prefix = root.endsWith("/") ? root : root + "/" - let path = stripQueryAndHash(stripFileProtocol(input)) + let path = input + + // Only strip protocol and decode if it's a file URI + if (path.startsWith("file://")) { + const raw = stripQueryAndHash(stripFileProtocol(path)) + try { + // Attempt to treat as a standard URI + path = decodeURIComponent(raw) + } catch { + // Fallback for legacy paths that might contain invalid URI sequences (e.g. "100%") + // In this case, we treat the path as raw, but still strip the protocol + path = raw + } + } if (path.startsWith(prefix)) { path = path.slice(prefix.length) @@ -218,7 +231,8 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({ function tab(input: string) { const path = normalize(input) - return `file://${path}` + const encoded = path.split("/").map(encodeURIComponent).join("/") + return `file://${encoded}` } function pathFromTab(tabValue: string) { -- cgit v1.2.3