|
Partner
|
|
|
ToHexEncodedString(string s) - Umlaute beim Dateidownload
Autor:
joerg.uth
|
Sprache:
C#
|
Bewertung:
6.85 (3 votes)
|
Anzahl der Aufrufe:
7806
|
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();
}
|
|
Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)
|
Adivera schrieb am:
01.10.2007 15:52:16
|
|
Diese Snippets könnten für Sie interessant sein:
|
|
|
|
|
|
|
|
|