Un décodage Base64 donne des résultats différents
Je suis en train de travailler sur un peu de Streamserve projet (google :P) où je reçois certains encodées en Base64 de contenu. J'ai essayé de décoder la chaîne base64 avec plusieurs décodeurs et de tout renvoyer le résultat correct.. sauf le Base64DecodeString méthode dans Streamserve.
La chaîne codée est: "VABlAHMAdABpAG4AZwAgAGIAYQBzAGUAnga0aa==' Le résultat attendu est: "Essais en base64'
Mais à l'intérieur de Streamserve le résultat est: "Tsig ae4'
Simplement, il ignore tous les autres lettres. Maintenant, je sais que la plupart des gens ne savent pas Streamserve, mais j'ai l'intuition que cela pourrait être un problème d'encodage des caractères.. problème et a été en espérant que quelqu'un a une idée de ce qui se passe ici.
Je peux sans aucun problème d'encodage/décodage des chaînes de caractères dans streamserve.. tout simplement pas les chaînes que je reçois comme entrée
- En fait, cette chaîne décode comme
T�e�s�t�i�n�g� �b�a�s�e�6�4�
dans le "bon" UTF-8. Je suppose que c'est codé sur un UTF-16.
Vous devez vous connecter pour publier un commentaire.
Le problème est que vous êtes de l'encodage en UTF-16 et de décodage arrière ASCII ou UTF-8. Changer votre chaîne de l'encodage UTF8 avant l'encodage de la chaîne base64 et il devrait fonctionner correctement.
Voici le dump de la base64 blob:
Si vous supprimez les octets nuls, vous obtenez ceci:
Qui se traduit par la suite en texte ASCII:
\n
retours à la ligne plutôt que le style Windows\r\n
.Le résultat de décodage base64 est binaire de données (et même de l'entrée lorsque encodage c'est des données binaires). Aller à partir de données binaires à une chaîne ou vice versa, vous devez appliquer une encodage tel que UTF-8 ou UTF-16. Vous avez besoin de savoir quel encodage Streamserve, et utiliser le même encodage lorsque vous convertissez votre texte, des données pour des données binaires pour commencer, avant d'en base64 encodage.
Il semble que vous pourrait souhaitez utiliser UTF-16 pour encoder votre texte pour commencer, bien que dans ce cas, je suis surpris que vous n'êtes pas juste en train de sortir les poubelles... on dirait qu'il est en fait ignorant tous les autres octets dans la décodé en base64, plutôt que de prendre ça comme du haut d'octets en UTF-16 code de l'unité.