using System.IO; using System.Text; namespace QuickLook.Plugin.HtmlViewer { internal static class UrlHelper { internal static string FilePathToFileUrl(string filePath) { var uri = new StringBuilder(); foreach (var v in filePath) if (v >= 'a' && v <= 'z' || v >= 'A' && v <= 'Z' || v >= '0' && v <= '9' || v == '+' || v == '/' || v == ':' || v == '.' || v == '-' || v == '_' || v == '~' || v > '\xFF') uri.Append(v); else if (v == Path.DirectorySeparatorChar || v == Path.AltDirectorySeparatorChar) uri.Append('/'); else uri.Append($"%{(int) v:X2}"); if (uri.Length >= 2 && uri[0] == '/' && uri[1] == '/') // UNC path uri.Insert(0, "file:"); else uri.Insert(0, "file:///"); return uri.ToString(); } } }