Recentemente descobri que, se eu incluir ‘~’ na biografia de um usuário, recebo um erro de base64decode do Discourse. Ele consegue lidar com todos os outros caracteres problemáticos sem problemas (espaços, =, %, &), mas não com ‘~’ por algum motivo.
Mais alguém encontrou este problema?
Meu primeiro pensamento é que talvez minha codificação esteja errada, mas ainda não consegui descobrir.
Aqui está minha implementação em Python da codificação:
Provavelmente deveria ser corrigido, mas essa pergunta está acima do meu nível e das minhas habilidades. Mas por pura curiosidade prática: por que alguém usaria um til na bio?
Eu administro um fórum multilíngue e em outras culturas o ‘~’ é frequentemente usado. Como exemplo, em coreano, ele é frequentemente usado no final para suavizar o tom, como ‘Se tiver alguma dúvida, me avise~’.
É? Um bug é algo que é feito, mas não funciona. Isso é mais como a pergunta “está feito ou não” e então é mais Feature se não for uma pergunta de suporte.
Parece que urlsafe_b64encode substitui alguns caracteres na codificação base64. Da documentação:
Codifica o objeto ssemelhante a bytes usando o alfabeto seguro para URL e sistema de arquivos, que substitui - em vez de + e _ em vez de / no alfabeto Base64 padrão, e retorna os bytes codificados. O resultado ainda pode conter =.
Isso significa que o resultado não é base64 padrão e não será compatível com a decodificação do Discourse.
Eu recomendaria usar a função b64encode normal em vez disso. Sua biblioteca HTTP cuidará do escape de URL, se necessário.