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?