0

I am trying to convert a string containing all the urlencoded ASCII characters to their actual character (For example: codes like %2F to /)

Example input string:

MO1hx4qqUQWzZIQvJqtv6HqqgBfuXr823bZbyHvPhiwFl65Uf7p%2FOfHSzYeWjTJLcFhBfaUITl%2F4%0D%0AkN5oWDSKtRWvzIy7B1dAfoufRHNec%2BSxVKTOdI%2BWItIxvq8Z3UXaF%2FlcwXM2hzCLEo6nVE4d%2Fgot%0D%0AANZzJJX%2FZi528wFyntdUnvMVfDXsPiFXHcxMzko95m2LdmZ%2FpP0kHTggUAo2vTS59wlX1AgPxRSq%0D%0AbeAQ48ynERGQVoIGa6SJapphuKbyyP089dRXaPeHD2cZ8VkibHmSWHUI%2Fotf83%2BCjxZfbDpUPT34%0D%0Al8WcBmnWdwl3O6OJljh%2B%2BIak7zwcGomCDX7X6RTuQMbQ%2F87eizY%2F5Gg7dz6kCG8WvKK6QT6aq7hc%0D%0ACMx8UiB2UJyXjp4ulF%2B%2F%2FonZTsXiwCDb6Fy7tkXrcUUDEYS0whuQOQcroMn%2BuFB7d%2FYFxe63eLdK%0D%0AMh3JUAX%2FAPsfSlUWfVwM7SnHFwBJimU2oxGbuivuWVdfnLtv7Gk%2B5cP3UWvz5y35EvEKaLVnPCi8%0D%0AfYRwhnKeQBgqCUVpjLV%2F6v4%3D

Example output string: (Both the strings are different - Just an example like the spaces , tabs, equal characters are applied)

MO1hx4qqUQWzZIQvJqtv6HqqgBfuXr823bZbyHvPhiwFl65Uf7p/OfHSzYeWjTJLcFhBfaUITl/4
kN5oWDSKtRWvzIy7B1dAfoufRHNec+SxVKTOdI+WItIxvq8Z3UXakzdwnycoupvbZ+d53FNgXNKq
9SPCUY147Bz8nAr1vrk7RTIgJNrHmwxOklN45fhWQP4Hl2ei6xzNCfoeEtabBrDh9YqqH+1WdC+B
kNlzfk/S1fQsgUSIhOVTTcIoUrmtmEEbCHdg0yQfY/UeCGZA7xnITglJbCGsUBuZAStfwCk71UOP
vyD77TaInl1ebT7GVbjJfDn1vZbHYrGb+5dX/Ym5ovPlBipV1xROZp4pM2ttNxKpq7SkHv8ShG7o
ntjyNnKKmX9CO6kt1doKT+1zKgQqAkHyJJT0eJXqObyMf2hFE9JA6XT/A3b9joajcV094xQlvp5X
0CezQMa1PMG71r/FhnVLVQNXK3+hHurHoYPOB8qxY7QktfI7KFPjOtixedK19OLB2ny3bJSnCJda
1hVG8pmdImgf08zNoc0bnbA=

I tried replacing each character by string a= b.Replace("%3D", "=") but every time some or the other character comes so i tried byte[] bytes = Encoding.ASCII.GetBytes(a);string b= Encoding.ASCII.GetString(bytes); still it is not converting. Any possible solution to achieve this?

Pavel Anikhouski
  • 21,776
  • 12
  • 51
  • 66
  • 2
    What you are trying to do is url decoding. The format %xx is used to encode some characters in urls. See for example https://stackoverflow.com/a/3847593/613130 – xanatos Dec 31 '20 at 14:15
  • This is not a URL decoding , It is just a response which i got from a service that i am trying to convert into the actual characters without the encoding codes – T S Nandakumar Dec 31 '20 at 14:35
  • 1
    The fact that you don't receive it as an url doesn't mean the string isn't in uri format. For example that string can be perfectly decoded to a `byte[]` with `Convert.FromBase64String(Uri.UnescapeDataString(str))`. – xanatos Dec 31 '20 at 14:38
  • I am doing it in Dotnet MVC Core so as you said i am doing `byte[] bytes = Convert.FromBase64String(Uri.UnescapeDataString(b)); string a = WebEncoders.Base64UrlDecode(bytes);` for URL encoding but still i didn't work , Is there anything i am doing wrong here. – T S Nandakumar Dec 31 '20 at 15:03
  • 1
    @T S `bytes` is already the finished "product". I don't know what you are expecting in that base64 string – xanatos Dec 31 '20 at 15:25
  • @Xanatos : But in that Byte , the Ascii codes are not replaced with the characters also the spaces , tabs and other stuffs , – T S Nandakumar Jan 04 '21 at 17:20
  • @T S It is unclear what you thought was present in that base64, but as jjxtra showed (and I double checked), it isn't present. It isn't a string, encoded in any of the most common formats. It isn't a compressed string, and so on. Perhaps it is an object that must be deserialized, perhaps it is encrypted. – xanatos Jan 04 '21 at 17:25

1 Answers1

0

I don't know what kind of data you are expecting, but when decoding that base64 string, I get complete garbage text. Are you sure this isn't some kind of binary format?

using System;
using System.Text;
using System.Web;

namespace MyNamespace
{
    class Program
    {
        public static void Main()
        {
            string text = "MO1hx4qqUQWzZIQvJqtv6HqqgBfuXr823bZbyHvPhiwFl65Uf7p%2FOfHSzYeWjTJLcFhBfaUITl%2F4%0D%0AkN5oWDSKtRWvzIy7B1dAfoufRHNec%2BSxVKTOdI%2BWItIxvq8Z3UXaF%2FlcwXM2hzCLEo6nVE4d%2Fgot%0D%0AANZzJJX%2FZi528wFyntdUnvMVfDXsPiFXHcxMzko95m2LdmZ%2FpP0kHTggUAo2vTS59wlX1AgPxRSq%0D%0AbeAQ48ynERGQVoIGa6SJapphuKbyyP089dRXaPeHD2cZ8VkibHmSWHUI%2Fotf83%2BCjxZfbDpUPT34%0D%0Al8WcBmnWdwl3O6OJljh%2B%2BIak7zwcGomCDX7X6RTuQMbQ%2F87eizY%2F5Gg7dz6kCG8WvKK6QT6aq7hc%0D%0ACMx8UiB2UJyXjp4ulF%2B%2F%2FonZTsXiwCDb6Fy7tkXrcUUDEYS0whuQOQcroMn%2BuFB7d%2FYFxe63eLdK%0D%0AMh3JUAX%2FAPsfSlUWfVwM7SnHFwBJimU2oxGbuivuWVdfnLtv7Gk%2B5cP3UWvz5y35EvEKaLVnPCi8%0D%0AfYRwhnKeQBgqCUVpjLV%2F6v4%3D";
            string urlDecoded = HttpUtility.UrlDecode(text);
            byte[] base64Decoded = Convert.FromBase64String(urlDecoded);
            string convertedString = Encoding.ASCII.GetString(base64Decoded);
            Console.WriteLine("Result: {0}", convertedString);
            Console.WriteLine("Press ENTER to quit");
            Console.ReadLine();
        }    
    }
}

Output text in utf-8:

0�aNJ�Q�d�/&�o�z���^�6ݶ[�{φ,��T�9��͇��2KpXA}�N_���hX4���̌�W@~��Ds^s�T��t��"�1���Eړ7p�'(���g�y�S`\Ҫ�#�Q�x���
���;E2 $�ǛN�Sx��V@��g���    �֛������Vt/���s~O���,�D���SM�(R���Aw`�$c�f@��N  Il!�P� _�);�C�� ��6��]^m>�U��|9����b����W������*U�Nf�)3km7������n���6r��B;�-��
O�s**A�$��x��9��hE�@�t�v����q]=�%��W�'�@Ƶ<��ֿņuKUW ��ǡ��ʱc�$��;(S�:رyҵ����|�l���Z�F�"h��͡���

Output text with ASCII:

0?a???Q?d?/&?o?z???^?6??[?{??,??T?9??????2KpXA}?N_???hX4??????W@~??Ds^s??T??t??"?1???E??7p?'(???g?y?S`\???#?Q?x???
???;E2 $???N?Sx??V@??g???   ?????????Vt/???s~O???,?D???SM?(R???Aw`?$c?f@??N Il!?P? _?);?C?? ??6??]^m>?U??|9????b????W??????*U?Nf?)3km7??????n????6r??B;?-??
O?s**A?$??x??9??hE?@?t?v????q]=?%??W?'?@??<??????uKUW ????????c?$??;(S?:??y??????|?l???Z?F???"h???????
jjxtra
  • 20,415
  • 16
  • 100
  • 140