Seite 1 von 2
UTF-8 URI Unescape
Verfasst: 28.02.2009 11:07
von tyty
Kennt jemand eine API-Funktion oder hat einen Code parat, um eine solche URI zu dekodieren?
Der%20Fr%C3%BChling%20Aus%20_Die%20Vier%20Jahres.mp3
Mit Urlunescape_ geht es nicht, da diese das %C3%BC als zwei Zeichen interpretiert.
Verfasst: 28.02.2009 11:56
von Little John
Code: Alles auswählen
name$ = URLDecoder("Der%20Fr%C3%BChling%20Aus%20_Die%20Vier%20Jahres.mp3")
Debug PeekS(@name$, -1, #PB_UTF8)
getestet mit PB 4.30
Gruß, Little John
Verfasst: 01.03.2009 09:38
von tyty
Danke, aber das funktioniert im Unicode-Modus nicht.
Verfasst: 01.03.2009 09:47
von Little John
tyty hat geschrieben:Danke, aber das funktioniert im Unicode-Modus nicht.
Sorry, aber "funktioniert nicht" ist keine hilfreiche Fehlerbeschreibung.
Was passiert denn genau, wenn Du o.g. Code ausführst?
Gruß, Little John
Verfasst: 01.03.2009 09:53
von tyty
Es wird lediglich ein "D" ausgegeben.
Verfasst: 01.03.2009 10:08
von Little John
In der Hilfe zu
PeekS() steht in Bezug auf das Flag
#PB_UTF8:
Liest den String als UTF8 (das Programm kann sowohl im Unicode- als auch im ASCII-Modus sein)
Da es hier offenbar nicht egal ist ob das Programm im Unicode-Modus compiliert wird oder nicht, handelt es sich IMHO um einen Bug in PB.
Gruß, Little John
Verfasst: 03.03.2009 03:57
von tyty
Gibt es dafuer denn evtl. noch eine andere Moeglichkeit?
Verfasst: 03.03.2009 08:38
von helpy
Das Problem liegt nicht bei PeekS() sondern daran, dass beim dekodieren mit URLDecoder jedes "%xx" als EIN Zeichen behandelt und entsprechend im Zielstring (name$) abgelegt wird.
Wird die Source im Ascii Modus kompiliert, funktiniert das Lesen mit PeekS(), weil das Ergebnis als UTF-8 interpretiert werden kann!
Wird die Source im Unicode Modus kompiliert, wird das Unicode-Zeichen "%C3%BC" in die beiden Zeichen "%C3" und "%BC" zerlegt und entsprechend im Zielstring als Unicode String als ZWEI Zeichen abgelegt. D.h. im Unicode Modus muss dieser Zielstring zuerst zurück nach Ascii konvertiert und dann als UTF-8 gelesen werden!
Bsp:
Code: Alles auswählen
uri.s = "Der%20Fr%C3%BChling%20Aus%20_Die%20Vier%20Jahres.mp3"
tmp.s = URLDecoder(uri)
CompilerIf #PB_Compiler_Unicode
tmpa.s = Space(Len(tmp))
PokeS( @tmpa, tmp, -1, #PB_Ascii)
name.s = PeekS(@tmpa, -1, #PB_UTF8)
CompilerElse
name.s = PeekS(@tmp, -1, #PB_UTF8)
CompilerEndIf
Debug name
Das hat bei mir in beiden Compiler-Modi (Ascii und Unicode) funktioniert.
cu, guido
Verfasst: 04.03.2009 08:05
von tyty
Vielen Dank, das funktioniert bei mir soweit einwandfrei.
Ich bin leider noch nicht ganz wunschlos gluecklich, denn mit noch exotischeren non-ASCII Zeichen klappt es leider nicht mehr ganz:
Bei
%e9%9f%b3%e6%a5%bd zum Beispiel wird das zweite Zeichen 楽 angezeigt, das erste 音 ergibt jedoch 3 Fragezeichen.
Und wenn ich das ganze auf einem japanischen PC ausprobiere, klappt es ohnehin nicht.

Verfasst: 04.03.2009 13:20
von helpy
Kann es sein, dass die zur Anzeige verwendete Schriftart auf Deinem PC diese Zeichen nicht enthält?