Feedback

C# - ToHexEncodedString(string s) - Umlaute beim Dateidownload

Veröffentlicht von am 04.11.2006
(3 Bewertungen)
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
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Aufbau

In dieser Schulung lernen Sie fortgeschrittene Techniken im Bereich .Net C#. Dabei stehen neben den eigentlichen Techniken auch architektonische Aspekte im Mittelpunkt.

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

/// <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();
    }
Abgelegt unter RFC 2396, Umlaute, Encodierung, HttpHeader.

1 Kommentare zum Snippet

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

Gruss Roberto
 

Logge dich ein, um hier zu kommentieren!