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~”.
Davvero? Un bug è qualcosa che è stato implementato, ma non funziona. Questo è più simile alla domanda “è stato completato o no” e, se non lo è, rientra più in Contribute > Feature che in 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.