Ich habe kürzlich festgestellt, dass, wenn ich ‘~’ in die Biografien eines Benutzers aufnehme, ich einen base64decode-Fehler von Discourse erhalte. Es kann alle möglichen anderen problematischen Zeichen problemlos verarbeiten (Leerzeichen, =, %, &), aber aus irgendeinem Grund nicht ~.
Ist jemandem dieses Problem schon einmal begegnet?
Mein erster Gedanke ist, dass meine Kodierung falsch sein könnte, aber ich konnte es bisher nicht herausfinden.
Hier ist meine Python-Implementierung der Kodierung:
Es sollte wahrscheinlich behoben sein, aber diese Frage übersteigt meine Zuständigkeit und meine Fähigkeiten. Aber aus rein praktischer Neugier: Warum sollte jemand eine Tilde in einer Biografie verwenden?
Ich betreibe ein mehrsprachiges Forum und in anderen Kulturen wird das ‘~’ häufig verwendet. Zum Beispiel wird es im Koreanischen oft am Ende verwendet, um den Ton abzuschwächen, wie zum Beispiel: „Wenn Sie Fragen haben, lassen Sie es mich wissen~“
Ist es das? Ein Fehler ist etwas, das getan wird, aber nicht funktioniert. Dies ist eher eine Frage „Ist es fertig oder nicht?“ und dann ist es eher Feature, wenn es keine Support-Frage ist.
Es sieht so aus, als ob urlsafe_b64encode einige Zeichen in der Base64-Kodierung ersetzt. Aus der Dokumentation:
Kodiert bytes-ähnliches Objekts unter Verwendung des URL- und Dateisystem-sicheren Alphabets, das - anstelle von + und _ anstelle von / im Standard-Base64-Alphabet ersetzt und gibt die kodierten bytes zurück. Das Ergebnis kann immer noch = enthalten.
Das bedeutet, dass das Ergebnis kein Standard-Base64 ist und nicht mit Discoures Dekodierung kompatibel ist.
Ich empfehle stattdessen die Verwendung der normalen b64encode-Funktion. Ihre HTTP-Bibliothek sollte sich bei Bedarf um das URL-Escaping kümmern.