2

asp.net Web サイトで、ユーザーが、ファイル名に emdash を含む電子メールの添付ファイルとしてファイルをアップロードしようとしました。これを電子メールの添付ファイル (Exchange サーバー) として送信すると、ファイルは _utf8_B_ * ** * .datに変換されました

したがって、.aspx ページでは、Request.Files コレクションの一部としてアップロードされたファイルのファイル名に emdash が存在するかどうかを検出できる必要があります。

string s = "a—b-";

byte[] arr = Encoding.ASCII.GetBytes(s);
foreach (byte element in arr)
{
   Response.Write(element.ToString() + ",");
}

上記の文字列には、2 番目の文字としてエムダッシュがあり、4 番目の文字として通常のハイフンがあります。

上記のコードは、画面に 97,63,97,45 を出力します。

emdash は有効な ASCII 文字ではないため、エラーがスローされるか、有効な ASCII 文字ではないことが示されると想定しました。それでも 63 を返します。

ファイル名の emdash を検出して、「ファイル名に無効な文字が含まれています」とユーザーに伝えるにはどうすればよいですか? この問題に関する他の質問を見てきましたが、それらを機能させることができません。

4

2 に答える 2

2

ファイル名の emdash を検出して、「ファイル名に無効な文字が含まれています」とユーザーに伝えるにはどうすればよいですか?

明日、ユーザーがファイルシステムまたはその API がサポートしていない別の Unicode 文字を含むファイルをアップロードするため、これは間違った方法です。また、NTFS は1 文字あたり 7 バイトをはるかに超えて処理できるため、ASCII は必要ありません。

正しい質問は次のとおりです:「ファイルを保存するために使用できる文字は何ですか?」しかし、ここでもファイルシステムの実装に縛られます。ランダムなファイル名を生成してそのパスにファイルを書き込み、ファイル名をデータベースに保存して元のファイル名を表示できるようにすることをお勧めします。

ユーザーが指定したパスの下にファイルを保存したい場合は、入力からPath.GetInvalidPathChars()andを削除する必要がPath.GetInvalidFileNameChars()あります。

問題がファイル システムではなくメール システムにある場合は、関連するコードとエラー メッセージを示してください。

于 2013-06-03T13:37:02.853 に答える
2

これはおそらくトリックを行うはずです:

    foreach (char c in s) {
        if (c >= 128) {
            Response.Write("Non-ascii char detected: {0}", c);
        }
    }

最初にASCIIに変換されると信じているEncoding.ASCII.GetBytesので、それを呼び出したときにASCII以外の文字が表示されることはありません。

于 2013-06-03T13:34:37.197 に答える