- /// URLのデコードを行う\r
- /// </summary>\r
- /// <param name="s">対象のurl文字列</param>\r
- /// <param name="e">デコードの処理に使う文字コード</param>\r
- public static string UrlDecode(string s, Encoding e)\r
- {\r
- // mono の System.Net.HttpUtility より作成\r
- \r
- if (null == s)\r
- return null;\r
-\r
- if (s.IndexOf ('%') == -1 && s.IndexOf ('+') == -1)\r
- return s;\r
-\r
- if (e == null)\r
- e = Encoding.GetEncoding (28591);\r
-\r
- StringBuilder output = new StringBuilder ();\r
- long len = s.Length;\r
- NumberStyles hexa = NumberStyles.HexNumber;\r
- MemoryStream bytes = new MemoryStream ();\r
-\r
- for (int i = 0; i < len; i++) {\r
- if (s [i] == '%' && i + 2 < len) {\r
- if (s [i + 1] == 'u' && i + 5 < len) {\r
- if (bytes.Length > 0) {\r
- //output.Append (GetChars (bytes, e));\r
- output.Append(e.GetChars(bytes.GetBuffer(), 0, (int) bytes.Length));\r
- bytes.SetLength (0);\r
- }\r
- \r
- output.Append ((char) int.Parse(s.Substring (i + 2, 4), hexa));\r
- i += 5;\r
- } else {\r
- bytes.WriteByte ((byte) int.Parse(s.Substring (i + 1, 2), hexa));\r
- i += 2;\r
- }\r
- continue;\r
- }\r
-\r
- if (bytes.Length > 0) {\r
- //output.Append (GetChars (bytes, e));\r
- output.Append(e.GetChars(bytes.GetBuffer(), 0, (int) bytes.Length));\r
- bytes.SetLength (0);\r
- }\r
-\r
- if (s [i] == '+') {\r
- output.Append (' ');\r
- } else {\r
- output.Append (s [i]);\r
- }\r
- }\r
-\r
- if (bytes.Length > 0) {\r
- //output.Append (GetChars (bytes, e));\r
- output.Append(e.GetChars(bytes.GetBuffer(), 0, (int) bytes.Length));\r
- }\r
-\r
- bytes = null;\r
- return output.ToString ();\r
- }\r
- \r
- /// <summary>\r
- /// ファイルパスから、指定のパスセパレータの意味でファイル名を取り出す。\r
- /// </summary>\r
- /// <param name="filepath">ファイルパス(またはURLパス)</param>\r
- /// <param name="separator">パスセパレータ</param>\r
- public static string Basedir(string filepath, char separator)\r
- {\r
- int dirSep = filepath.LastIndexOf(separator);\r
- if (dirSep < 0) return "";\r
-\r
- return filepath.Substring(0, dirSep);\r
- }\r
- \r
- /// <summary>\r