Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
756to760
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
756to760
756to760
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

MIME Typ - Kodierung für Umlaute gesucht

MIME Typ - Kodierung für Umlaute gesucht
26.04.2006 13:18:24
Thias
Hallo Forumgemeinde,
meine Frage ist nicht unbedingt Excel/VBA bezogen, aber vielleicht hat schon irgendwer dieses Problem mit Excel gelöst.
Ich lasse mir per Email Formulardaten von meiner Webseite zuschicken. Gemäß der der MIME-Typ Kodierung "application/x-www-form-urlencoded" werden dabei Umlaute und Sonderzeichen in einen kodierten String umgewandelt.
Aus dem Satz
Danke für die Hilfe!
wird nach der Umwandlung:
Danke+f%FCr+die+Hilfe%21
Mittels VBA könnte ich nun die kodierten Umlaute, Leerzeichen etc. recht einfach in die korrekten Zeichen umwandeln - wenn ich wüsste, welcher Umlaut oder welches Steuerzeichen welche Kodierung besitzt.
Daher meine Frage: Weiß irgendwer, ob es irgendwo im Netz eine entsprechende "Umwandlungstabelle" für den MIME-Typ application/x-www-form-urlencoded gibt?
Über eine Antwort würde ich mich sehr freuen.
Gruß Thias

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MIME Typ - Kodierung für Umlaute gesucht
26.04.2006 20:44:51
Erich
Hallo Thias,
vielleicht hilft dir http://de.selfhtml.org/inter/zeichenkodierungen.htm
FC ist hex. für 252, und 252 codiert ein ü
21 ist hex. für 033, und 033 codiert ein !
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: MIME Typ - Kodierung für Umlaute gesucht
27.04.2006 07:25:25
Thias
Moin Erich!
Wie man von den Umlauten zu den Hex-Werten kommt, weiß ich mittlerweile - Danke!
Man kann dafür die von Windows mitgelieferte Zeichentabelle nutzen.
Nun stellt sich mir aber die Frage, welche Zeichen werden in Hex codiert, und welche Zeichen kommen gleich korrekt an?
Dass die Umlaute als Hex-Zahlen ankommen, ist mir schon klar - genau wie das ß und auch das Ausrufezeichen. Aber was noch? Ich könnte den umständlichen Weg gehen und mir jedes Zeichen per Formular zuschicken lassen, aber das kann doch nicht der einfachste Weg sein, oder etwa doch?
Vielleicht weiß noch jemand einen besseren Tipp?
Gruß Thias
Anzeige
AW: MIME Typ - Kodierung für Umlaute gesucht
27.04.2006 11:04:45
Thias
Hallo Erich,
Danke für den Link. Hilft mir aber für dieses Problem leider nicht weiter. Wie gesagt - die Zeichen in Hex umwandeln kann man ohne Probleme mit der Windowszeichentabelle.
Es bleibt aber weiterhin die Frage offen, welche Zeichen nach dem MIME-Typ "application/x-www-form-urlencoded" mittels eines Formulares korrekt übermittelt werden, und welche Hex-codiert ankommen.
Gruß Thias
Anzeige
AW: MIME Typ - Kodierung für Umlaute gesucht
28.04.2006 06:49:31
Erich
Hallo Thias,
brauchst du überhaupt eine Übersetzungstabelle, musst du wirklich wissen, welche Zeichen genau kodiert werden? Die folgende Funktion dekodiert einfach alle kodierten Zeichen:
Option Explicit
Function MimeToTxt$(ss$)
Dim ii%, zz1$, zz2$
For ii = 1 To Len(ss)
Select Case Mid(ss, ii, 1)
Case "&":   MimeToTxt = MimeToTxt & " Feld:"
Case "=":   MimeToTxt = MimeToTxt & " Wert:"
Case "+":   MimeToTxt = MimeToTxt & " "
Case "%"
zz1 = Mid(ss, ii + 1, 1)
zz2 = Mid(ss, ii + 2, 1)
MimeToTxt = MimeToTxt & Chr((Asc(zz1) - 48 + 7 * (zz1 > "9")) * 16 _
+ Asc(zz2) - 48 + 7 * (zz2 > "9"))
ii = ii + 2
Case Else:  MimeToTxt = MimeToTxt & Mid(ss, ii, 1)
End Select
Next ii
End Function
Liefert diese Funktion das von dir gewünschte Ergebnis? (& und = kommen bei dir nicht vor, da du ja nur den Wert eines Feldes auswerten willst.)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: MIME Typ - Kodierung für Umlaute gesucht
28.04.2006 07:56:35
Erich
Hallo Thias,
oder etwas kürzer so?
Option Explicit
Function MimeToTxt$(ss$)
Dim ii%
For ii = 1 To Len(ss)
Select Case Mid(ss, ii, 1)
Case "&":   MimeToTxt = MimeToTxt & " Feld:"
Case "=":   MimeToTxt = MimeToTxt & " Wert:"
Case "+":   MimeToTxt = MimeToTxt & " "
Case "%"
MimeToTxt = MimeToTxt & Chr("&H" & Mid(ss, ii + 1, 2))
ii = ii + 2
Case Else:  MimeToTxt = MimeToTxt & Mid(ss, ii, 1)
End Select
Next ii
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: MIME Typ - Kodierung für Umlaute gesucht
28.04.2006 08:38:12
Thias
Moin!
Danke für Deine Hilfe, Erich.
Allerdings habe ich das Problem, dass ich die Umwandlung in WORD vornehmen wollte.
Die Formulardaten sind größtenteils Text - also keine Datensätze, die ich in irgendeiner Form mit Excel weiterbearbeiten müsste oder möchte.
Daher denke ich, dass man in WORD einen anderen Ansatz wählen muss. Vielleicht in der Form, dass ich den gesamten Text erstmal in einer Stringvariablen speichere, und dann "irgendwie" Deine Routine darauf anwende.
Bis jetzt hatte ich das Problem so gelöst, dass ich einfach nach den mir schon bekannten Hex-Werten (z.B. %FC = "ü", %21 = "!", etc. ) suche und dann ersetzen lasse. Das Problem dabei ist, dass immer mal wieder Zeichen auftauchen, von denen ich bis jetzt noch nicht wusste, dass sie in Hex codiert ankommen.
Gruß Thias
Anzeige
AW: Dekodierung in WORD
28.04.2006 10:24:58
Erich
Hallo Thias,
die Funktion hat doch gar nichts mit Excel oder Datensätzen zu tun. Dass sie auch in Word funzt, kannst du damit ausprobieren:
Option Explicit
Sub URLDecode()
Dim ii
Const strZ = "0123456789ABCDEF"
'                                   Alle Pluszeichen durch Leerzeichen ersetzen
Selection.HomeKey Unit:=wdStory
With Selection.Find
.Text = "+"
.Replacement.Text = " "
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.Execute Replace:=wdReplaceAll
End With
'                                   Alle Kodierungen durch Klartext ersetzen
With Selection.Find
.Replacement.Text = ""
Do While .Execute(FindText:="%") = True
Selection.MoveRight Unit:=wdCharacter, Count:=2, Extend:=wdExtend
If InStr(strZ, Mid(Selection.Text, 2, 1)) > 0 And _
InStr(strZ, Right(Selection.Text, 1)) > 0 Then _
Selection.TypeText MimeToTxt$(Selection.Text)
Selection.MoveRight Unit:=wdCharacter
Loop
End With
End Sub
Function MimeToTxt$(ss$)
Dim ii%
For ii = 1 To Len(ss)
Select Case Mid(ss, ii, 1)
Case "&":   MimeToTxt = MimeToTxt & " Feld:"
Case "=":   MimeToTxt = MimeToTxt & " Wert:"
Case "+":   MimeToTxt = MimeToTxt & " "
Case "%"
MimeToTxt = MimeToTxt & Chr("&H" & Mid(ss, ii + 1, 2))
ii = ii + 2
Case Else:  MimeToTxt = MimeToTxt & Mid(ss, ii, 1)
End Select
Next ii
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Dekodierung in WORD
28.04.2006 11:37:10
Thias
Hallo Erich!
Das Script funktioniert tatsächlich einwandfrei! Danke!
Nun würde ich nur noch gerne verstehen, wie der Programmablauf funktioniert. Bin noch nicht so wirklich firm mit VBA. Habe bis jetzt immer nur sehr einfache Funktionen realisiert. Vor allem kenne ich noch lange nicht alle Funktionen / Objekte.
Werde mich mit dem Code mal ein wenig auseinandersetzen und schauen, was ich so verstehe.
Gruß Thias
https://www.herber.de/forum/messages/759534.html
29.04.2006 15:52:44
hier
h
AW: Dekodierung in WORD kürzer
28.04.2006 11:33:43
Erich
Hallo nochmal,
es geht auch kürzer, ganz ohne Funktion:
Option Explicit
Sub URLDecode()
Dim tt As String * 2
Const strZ = "0123456789ABCDEF"
'                                   Pluszeichen durch Leerzeichen ersetzen
Selection.HomeKey Unit:=wdStory
With Selection.Find
.Text = "+"
.Replacement.Text = " "
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.Execute Replace:=wdReplaceAll
End With
'                                   Kodierungen durch Klartext ersetzen
With Selection.Find
.Replacement.Text = ""
Do While .Execute(FindText:="%") = True
Selection.MoveRight Unit:=wdCharacter, Count:=2, Extend:=wdExtend
tt = Right(Selection.Text, 2)
If InStr(strZ, Left(tt, 1)) * InStr(strZ, Right(tt, 1)) > 0 Then
Selection.TypeText Chr("&H" & tt)
End If
Selection.MoveRight Unit:=wdCharacter
Loop
End With
Selection.HomeKey Unit:=wdStory
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige