Recientemente descubrí que si incluyo ‘~’ en la biografía de un usuario, obtengo un error de base64decode de Discourse. Puede manejar todo tipo de otros caracteres problemáticos sin problemas (espacios, =, %, &), pero no ‘~’ por alguna razón.
¿Alguien más ha encontrado este problema?
Mi primer pensamiento es que quizás mi codificación sea incorrecta, pero no he podido resolverlo.
Aquí está mi implementación en Python de la codificación:
Probablemente debería arreglarse, pero esa pregunta está por encima de mis posibilidades y habilidades. Pero por pura curiosidad práctica: ¿por qué alguien usaría una tilde en una biografía?
Dirijo un foro multilingüe y en otras culturas se usa con frecuencia el ‘~’. Por ejemplo, en coreano, a menudo se usa al final para suavizar el tono, como “Si tienes alguna pregunta, házmelo saber~”.
¿Lo es? Un error es algo que se hace, pero no funciona. Esto se parece más a la pregunta “¿está hecho o no?” y entonces es más Feature si no es una pregunta de soporte.
Sí, creo que Bug es apropiado. Creo que lo estoy codificando en base64 correctamente, por lo que discourse también debería decodificarlo correctamente.
Parece que urlsafe_b64encode reemplaza algunos caracteres en la codificación base64. De la documentación:
Codifica el objeto similar a bytesbytes-like objects usando el alfabeto seguro para URL y sistemas de archivos, que sustituye - en lugar de + y _ en lugar de / en el alfabeto Base64 estándar, y devuelve los bytes codificados. El resultado aún puede contener = .
Eso significa que el resultado no es base64 estándar y no será compatible con la decodificación de Discourse.
Recomiendo usar la función b64encode normal en su lugar. Su biblioteca HTTP debería encargarse del escape de URL si es necesario.