Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1563 | Anzahl registrierter User: 1895 | Besucher online: 369
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

ToHexEncodedString(string s) - Umlaute beim Dateidownload


Autor: joerg.uth
Sprache: C#
Bewertung:
6.85 (3 votes)
Anzahl der Aufrufe: 7806
  
Kick it on dotnet-kicks.de  

Beschreibung:

Diese Methode encodiert Zeichenfolgen: Urls,Dateinamen etc.
für die Übertragung im HttpHeader zur weiteren Verwendung
in einen Hexcodierten String, damit Sonder- und Leerzeichen so übertragen werden
das es beim Client "richtig" ankommt.

Beispiel: FileDownload mit Response.WriteFile

Dabei ist es möglich Dateien vom Filesystem per
Http an den Client zu übertragen und der Datei
einen Namen zugeben.
Dateiname auf dem System:
{7fcd1a85-d5c8-4419-a5e0-ee12b1ab2057}.zip
Gewünschter Name:
Überführungrichtlinie EU Neufahrzeuge.zip

Dazu fügt man dem Response.Header folgendes hinzu:
Response.AddHeader("Content-Disposition", "attachment; filename=Überführungrichtlinie EU Neufahrzeuge.zip");

Da der Dateiname jedoch Sonderzeichen / Leerzeichen enthält gibts Probleme beim Client,
im Dialog speichern erscheint: Überführungsrichtlinie_EU_Neufahrzeuge.zip

Auch UrlEncode hilft da nicht: Überführungsrichtlinie+EU+Neufahrzeuge.zip

Daher diese Methode ToHexEncodedString(string s)
"attachment; filename=" + ToHexEncodedString("Überführungrichtlinie EU Neufahrzeuge.zip");
wird zu %c3%9cberf%c3%bchrungrichtlinie%20EU%20Neufahrzeuge.zip
im speichern Dialog erscheint nun
Überführungrichtlinie EU Neufahrzeuge.zip


Abgelegt unter: RFC 2396, Umlaute, Encodierung, HttpHeader.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// <summary>
    /// Encodiert Sonderzeichen
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    public static string ToHexEncodedString(string s)
    {
        System.Text.StringBuilder returnValue = new System.Text.StringBuilder();
        System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding();
        string reservedChars = "_+-=.,!'()@&$";
        char[] chr = s.ToCharArray();
        for (int i=0;i!=chr.Length; i++)
        {
            if (chr[i] <= 127 && (reservedChars.IndexOf(chr[i]) != -1 || char.IsLetterOrDigit(chr[i])))
                returnValue.Append(chr[i]);
            else
            {
                System.Text.StringBuilder encodedValue = new System.Text.StringBuilder();
                byte[] encBytes = utf8.GetBytes(chr[i].ToString());
                for (int j = 0; j != encBytes.Length; j++)
                {
                    encodedValue.AppendFormat("%{0}", Convert.ToString(encBytes[j], 16));
                }
                returnValue.Append(encodedValue.ToString());
            }
        }
        return returnValue.ToString();
    }
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Adivera schrieb am:  01.10.2007 15:52:16

Danke :-). Genau dass was ich gesucht habe. Wieso ist das eigentlich nicht fix im .net Framework drin ?

Gruss Roberto


Diese Snippets könnten für Sie interessant sein:

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.