UTF-8 URI Unescape
UTF-8 URI Unescape
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.
Der%20Fr%C3%BChling%20Aus%20_Die%20Vier%20Jahres.mp3
Mit Urlunescape_ geht es nicht, da diese das %C3%BC als zwei Zeichen interpretiert.
Code: Alles auswählen
name$ = URLDecoder("Der%20Fr%C3%BChling%20Aus%20_Die%20Vier%20Jahres.mp3")
Debug PeekS(@name$, -1, #PB_UTF8)
Gruß, Little John
In der Hilfe zu PeekS() steht in Bezug auf das Flag #PB_UTF8:
Gruß, Little John
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.Liest den String als UTF8 (das Programm kann sowohl im Unicode- als auch im ASCII-Modus sein)
Gruß, Little John
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:
Das hat bei mir in beiden Compiler-Modi (Ascii und Unicode) funktioniert.
cu, guido
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
cu, guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
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.
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.

