2

精巧なAPIを使用してYoutubeからデータをフェッチするアプリケーションを構築しています。データファイルは、対応するビデオの名前をファイル名として保存されます。ただし、YouTubeのビデオのかなりの数のタイトルに、Windowsでのファイル名に使用するのが違法な文字が含まれているため、プログラムがクラッシュします。

ビデオのタイトルをURLエンコードすると、この問題は解決しますか?

もしそうなら、これは使用するのに最適な方法であり、URLEncodeを実装するための最良の方法は何でしょうか?

ありがとう!:)

4

4 に答える 4

4

URLエンコーディングを行いたい場合は、HttpUtility.UrlEncode. でも、そうするかどうかはわかりません。必要なすべての文字を削除する場合がありますが、他の文字も同様に削除します.

私はおそらく使用Path.GetInvalidFilenameCharsして、名前の無効なものをアンダースコアに置き換えるだけだと思います。

もちろん、これは可逆エンコーディングではありませんが、より理解しやすいファイル名が生成されると思います。元のタイトルからファイル名にも対応するインデックス ファイルを作成することもできます。

于 2009-07-03T06:08:36.860 に答える
1

私は同様の問題でこれをやってしまいました:

    static string Escape(string input)
    {
        StringBuilder builder = new StringBuilder(input.Length);
        for (int i = 0; i < input.Length; i++)
        {
            if (Path.GetInvalidPathChars().Contains(input[i]) || Path.GetInvalidFileNameChars().Contains(input[i]) || input[i] == '%')
            {
                builder.Append(Uri.HexEscape(input[i]));
            }
            else
            {
                builder.Append(input[i]);
            }
        }
        return builder.ToString();
    }

    static string Unescape(string input)
    {
        StringBuilder builder = new StringBuilder(input.Length);
        int index = 0;
        while (index < input.Length)
        {
            builder.Append(Uri.HexUnescape(input, ref index));
        }
        return builder.ToString();
    }

このコードをすべて書かなければならないのは少し奇妙に感じましたが、少なくとも、OS で安全に使用できる読み取り可能なファイル名が得られます。

于 2010-10-21T11:48:26.243 に答える
1

Url Encoding は、無効な文字 (およびいくつかの有効な文字) を '%' とそれに続く一連の 16 進数に置き換える必要があるため、問題を解決する必要があります。私の知る限り、これはファイル システム名に有効です。

ただし、これには 2 つの疑問があります。

  1. ファイル名をきれいに読めることは、ユーザーにとって重要ですか? そうでない場合は、一意のファイル名 (1.file、2.file、3.file) と、ファイル名 -> タイトルからのマッピングを使用することをお勧めします。

  2. 2 つの動画の名前が同じ場合はどうなりますか? 最初の質問の延長のようなものだと思います。

  3. タイトル (URL エンコード時) がファイル名の最大長よりも長い場合はどうなりますか? 私の記憶が正しければ、ファイル名の最大長は NTFS では 255 文字です。タイトルの各文字が URL エンコーディング用に 3 文字に拡張される場合、85 文字のタイトルで 255 文字の制限を満たすことができます。

編集/更新: UrlEncode が無効なファイル システム文字であると見なす文字がいくつかあります。私が特に遭遇したのは「\」です。いいえ、Url Encoding は安全ではありません。

于 2009-07-03T06:08:48.013 に答える
0

動画名の代わりに YouTube の動画 ID を使用できますか? 例: v=Yk6oPsKZG_w。それとも、あなたはそれにアクセスできませんか?それらには単純な英数字が含まれているようで、YouTube 内で一意である必要があります。

動画名にアスタリスクが含まれている場合に urlencode が役立つかどうかはわかりません。

それでもビデオ名を使用したい場合は、Win32 API にすべての文字列解析を無効にし、この文字列をファイル システムに直接送信するように指示する "\\?\" プレフィックスを使用して確認することをお勧めします。

http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx#path_names_and_namespaces

それを .NET API で使用できるかどうか、または DllImport を使用して Win32 API を直接呼び出す必要があるかどうかはわかりません。

于 2009-07-03T06:22:01.593 に答える