0

我有一个创建 Windows Internet 快捷方式文件 (.url) 的进程。这些文件以 UTF-8 编码。这些文件包含一个 [InternetShortcut] 部分,其中指定了 URL=。在这种情况下,这些是 file:/// 协议 URL,它允许人们在他们的 LAN 上打开路径。URL 都是 UNC 路径。

通常,该过程工作正常。但是,当 UNC 路径包含 Unicode 字符时,例如下面代码示例中的“í”,当最终用户尝试从 Windows 资源管理器打开 Internet 快捷方式时,Windows 无法“找到”该 URL:

示例文件如下:

[InternetShortcut]
URL=file:///\\lt-splourde\d$\POC\Montería Test\
IconIndex=1

当我使用文本编辑器打开上面的示例 .url 文件时,我看到了带有正确 Unicode 字符的路径。但是当我尝试从 Windows 资源管理器打开文件以访问路径时,Windows 报告它无法访问路径,并且它似乎破坏了 Unicode 字符。

创建这些快捷方式的源代码如下:

private void CreateShortcutAsUrl(string uncRootPath, string name, string path, int projectId)
{
    path = path + (path.EndsWith(@"\") ? "" : @"\");

    using (StreamWriter writer = new StreamWriter(
        String.Format(@"{0}\{1}\{2}.url", uncRootPath,
            ShortcutsDirectory, new FileServerController().SanitizeNameForDirectory(name)),
            false, Encoding.UTF8)) 
    {
        writer.WriteLine(@"[InternetShortcut]");
        writer.WriteLine(@"URL=file:///" + path);
        writer.Flush();
    }
}

有谁知道这个问题的解决方案?

谢谢!

(我最初在超级用户上发布了这个,但我觉得内容更面向程序员)

4

1 回答 1

1

尝试 .NET 的等价物InternetCanonicalizeUrl,即System.Uri.EscapeUriString,这样的东西(假设您的 URI 在szOriginalString

String szEscapedString = System.Uri.EscapeUriString(szOriginalString); 

然后写szEscapedString为 URI 而不是原来的。

于 2013-06-13T15:22:04.423 回答