Recentemente ho scoperto che se includo ‘~’ nella biografia di un utente, ottengo un errore di base64decode da Discourse. Può gestire correttamente tutti gli altri caratteri problematici (spazi, =, %, &) ma non ‘~’ per qualche motivo.
Qualcun altro ha riscontrato questo problema?
Il mio primo pensiero è che forse la mia codifica potrebbe essere errata, ma non sono riuscito a capirlo.
Ecco la mia implementazione Python della codifica:
Probabilmente dovrebbe essere risolto, ma quella domanda va oltre le mie competenze e capacità. Ma per pura curiosità pratica: perché qualcuno userebbe una tilde in una bio?
Gestisco un forum multilingue e in altre culture ‘~’ viene spesso utilizzato. Ad esempio, in coreano, viene spesso usato alla fine per addolcire il tono, come “Se hai domande, fammelo sapere~”.
È così? Un bug è qualcosa che viene fatto, ma non funziona. Questo è più simile alla domanda “è fatto o no” e poi è più Feature se non è una domanda di supporto.
Sembra che urlsafe_b64encode sostituisca alcuni caratteri nella codifica base64. Dalla documentazione:
Codifica l’oggetto s simile a byte utilizzando l’alfabeto sicuro per URL e file system, che sostituisce - invece di + e _ invece di / nell’alfabeto Base64 standard e restituisce i byte codificati. Il risultato può ancora contenere =.
Ciò significa che il risultato non è base64 standard e non sarà compatibile con la decodifica di Discourse.
Consiglierei di utilizzare invece la normale funzione b64encode. La tua libreria HTTP dovrebbe occuparsi dell’escape degli URL, se necessario.