VBA Unicode in Link mit % konvertieren

Hallo,

ich hab mich bereits durch viele Webseiten bzgl. des Themas „Unicode-Konvertierung mit VBA“ durchgeschlagen. Leider bin ich nicht recht weitergekommen.

Mein Problem ist, dass ich einen Text konvertieren möchte, der aus einem Link stammt:

%25C3%25A2%25C2%2599%25C2%25A5%2B%25C3%25A2%25C2%2599%25C2%25A5%2B%25C3%25A2%25C2%2599%25C2%25A5%2BPapusika%2Btuturor%2BJukaria%2Bnimanui%25C3%25A2%25C2%2599%25C2%25A5%2B%25C3%25A2%25C2%2599%25C2%25A5%2B%25C3%25A2%25C2%2599%25C2%25A5%2B

Wie man sieht ist der Text halb in Unicode - enthält aber offensichtlich auch normalen Text. Bei den Zeichen handelt es sich offensichtlich um grafische Zeichen wie Herzen oder Dreiecke.

Ich bräuchte jetzt eine Funktion, bei der der Input-Text einfach umgewandelt wird. Der Output-Text enthält dann die sichtbaren Herzchen und den normalen Text.

Natürlich brauche ich dann auch eine umgekehrte Funktion um wieder zu meinen Link zu kommen, wenn ich ihn brauche. Das Herzchen soll dann wieder in den Code mit % umgewandelt werden.

Vielleicht hat ja jemand gerade etwas griffbereit…

Grüße

Stefan

Wie man sieht ist der Text halb in Unicode - enthält aber
offensichtlich auch normalen Text. Bei den Zeichen handelt es
sich offensichtlich um grafische Zeichen wie Herzen oder
Dreiecke.
Ich bräuchte jetzt eine Funktion, bei der der Input-Text
einfach umgewandelt wird. Der Output-Text enthält dann die
sichtbaren Herzchen und den normalen Text.

Hi Stefan,

m.E. wird das nicht 100%ig machbar sein.

Wie man sieht stehen nach dem Prozentzeichen mal 2, mal 4 Zeichen, danach kommt entweder normaler Text oder wieder ein Prozentzeichen, soweit so gut.

man könnte also locker den String durchgehen, nach jedem % schauen ob 2 oder 4 nachfolgende Zeichen in 0-9 A-E enthalten sind usw.

Nur wenn nicht wie hier
%2BPapusika
nach dem „2B“ zwei nicht zugehörige Zeichen, also Pa, erkennbar ist, sondern da steht
%2BABGANG
wie soll dann das makro erkennen dass es sich um
a) das Zeichen %2B und nachfolgendem Text ABGANG handelt
oder
b) das Zeichen %2BAB und nachfolgendem Text GANG handelt
?

Also, man kann da schon was basteln, aber wie auch immer der Code ist, diese Schwachstelle wird bleiben *glaub*

Gruß
Reinhard

also

eigentlich ja einfach

erst alle UTF-8 umwandeln,
dann alle Urlencode umwandeln.

das geht, da UTF-8 dementsprechend im anderen wertebereich anfängt.

schau mal dort :
http://www.experts-exchange.com/Programming/Misc/Q_2…

und
http://www.motobit.com/help/scptutl/sa323.htm

das selbe dann andersrumm , also erst url dann utf-8

Stefan

m.E. wird das nicht 100%ig machbar sein.

warum nicht ?

Wie man sieht stehen nach dem Prozentzeichen mal 2, mal 4
Zeichen, danach kommt entweder normaler Text oder wieder ein
Prozentzeichen, soweit so gut.

das kein problem

denn http://de.wikipedia.org/wiki/URL-Kodierung#Nicht-ASC…

Eine Unterscheidung zwischen zwei einzelnen kodierten ASCII-Zeichen (z.B. %23%23 für ##) und einem 2-Byte-UTF-8-Zeichen (z.B. %C3%B6) ergibt sich aus der Art, wie UTF-8 kodiert ist. Die einzelnen Bytes ergeben für sich allein keine gültigen ASCII-Zeichen, da C3 der dezimalen 195 entspricht und B6 der 182. Da es nur 128 ASCII-Zeichen gibt, können es auch keine zwei einzelnen Zeichen sein und die Zeichen werden zusammen als UTF-8-kodiert angenommen. Eine Verwechslung ist somit nicht möglich.

und

Eine weitere Eigenheit bei der %-Kodierung von UTF-8-Zeichen ist, dass der erste Codewert immer ein Zeichencode der oberen Reihe der ISO 8859-1, der folgende Codewert (bzw. die folgenden, wenn mehr als zwei Byte) jedoch immer ein Steuerzeichencode der oberen Reihe jener ISO 8859-1 sein muss.

Also, man kann da schon was basteln, aber wie auch immer der
Code ist, diese Schwachstelle wird bleiben *glaub*

ne zum glück nicht :smile:

denn
Auf einer ähnlichen Basis können einige Server auch ermitteln, welche Kodierung in der URL verwendet wird.

Gruß
Reinhard

Glaub ich nicht, UTF-8 unterscheiden sich im wertebereich eindeutig.
das erste %FF ist höher als alle normalen ascii

Hallo Rakon,

http://de.wikipedia.org/wiki/URL-Kodierung#Nicht-ASC…

Eine Unterscheidung zwischen zwei einzelnen kodierten
ASCII-Zeichen (z.B. %23%23 für ##) und einem
2-Byte-UTF-8-Zeichen (z.B. %C3%B6) ergibt sich aus der Art,
wie UTF-8 kodiert ist. Die einzelnen Bytes ergeben für sich
allein keine gültigen ASCII-Zeichen, da C3 der dezimalen 195
entspricht und B6 der 182. Da es nur 128 ASCII-Zeichen gibt,
können es auch keine zwei einzelnen Zeichen sein und die
Zeichen werden zusammen als UTF-8-kodiert angenommen. Eine
Verwechslung ist somit nicht möglich.

ich habe das jetzt paarmal gelesen, auch bei Wiki. Für deren Beispiele versteh ich das.
Aber hier in der Anfrage sehe ich in dem String

%25A5
%2BPapusika

25H und 2BH sind ja gültig, da sie kleiner 128D sind, also könnte da auch stehen

%2BAB
%2BABGANG

Im ersten Fall soll daraus das Zeichen %2BAB werden, im zweiten das Zeichen &2B und der Text ABGANG

Da hänge ich noch stark fest.

Sicher ich könnte prüfen wie weit weg das nächste Prozentzeichen nach einem Prozentzeichen ist, aber das bringt ja keine Gewissheit ob mit

&2BAB%2B

gemeint ist:

Zeichen %2B dann Text AB dann Zeichen %2B

oder aber

Zeichen %2BAB dann Zeichen %2B

Gruß
Reinhard

ich glaub du hast den string falsch interpretiert

schau dir das mal so an

%25C3
%25A2
%25C2
%2599
%25C2
%25A5
%2B
%25C3
%25A2
%25C2
%2599
%25C2
%25A5
%2B
%25C3
%25A2
%25C2
%2599
%25C2
%25A5
%2BPapusika
%2Btuturor
%2BJukaria
%2Bnimanui
%25C3
%25A2
%25C2
%2599
%25C2
%25A5
%2B
%25C3
%25A2
%25C2
%2599
%25C2
%25A5
%2B
%25C3
%25A2
%25C2
%2599
%25C2
%25A5
%2B

dann siehst du das %25 das einzelne zeichen für ‚%‘ ist in der ascii

ergo steht da

%C3
%A2

%C2
%99

%C2
%A5

%2B

%C3
%A2

%C2
%99

%C2
%A5

%2B

%C3
%A2

%C2
%99

%C2
%A5

%2B
Papusika

%2B
tuturor

%2B
Jukaria

%2B
nimanui

%C3
%A2

%C2
%99

%C2
%A5

%2B
%C3

%A2
%C2

%99
%C2

%A5
%2B

%C3
%A2

%C2
%99

%C2
%A5

%2B

siehst du jetzt die eindeutigen UTF-8 Zeichen

%2B ist nicht UTF-8 weil falscher Bereich

%C2%A5 ist UTF-8 :smile:

also nur erstmal das % selber encoden :smile:

da hab ich ja noch was vergessen,
erst alle %25 in % umwandeln :smile: den das % zeichen muss ja auch codiert übertragen werden, speich decodieren :smile: danach ist es dann UTF-8 und danach ASCII :smile: viel spass.

Unten siehst du die auflösung des strings

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hier nochmal die Tabelle

http://www.utf8-zeichentabelle.de/unicode-utf8-table…

%25 :smile: ist defenitiv auch im UTF-8 Format %-Zeichen
%2B :smile: ist defenitiv UTF-8 Format ±Zeichen

macht ja auch sin bei einer URL :smile: + für leerzeichen