ASCIIEncoding.ASCII.GetBytes() Returning Unexpected Value

前端 未结 3 1842
深忆病人
深忆病人 2020-11-30 15:43

This C# code...

string s = \"\\u00C0\";
byte[] bytes = ASCIIEncoding.ASCII.GetBytes(s);
Trace.WriteLine(BitConverter.ToString(bytes));

prod

3条回答
  •  时光取名叫无心
    2020-11-30 16:13

    First step: you assing unicode char to string, then you convert it to ASCII (but it is unicode). Then you are trying to convert it back using unicode converter.

    The following example do all possibilities to make my response more clear:

        static void Main(string[] args)
        {
            string s = "\u00C0";
            Console.WriteLine(s);
            byte[] bytes = ASCIIEncoding.ASCII.GetBytes(s);
            Console.WriteLine(BitConverter.ToString(bytes));
            Console.WriteLine(ASCIIEncoding.ASCII.GetString(bytes));
    
            Console.WriteLine("Again");
            bytes = Encoding.UTF8.GetBytes(s);
            Console.WriteLine(BitConverter.ToString(bytes));
            Console.WriteLine(Encoding.UTF8.GetString(bytes));
    
            Console.ReadLine();
        }
    

    And the output is:

    A
    3F
    ?
    Again
    C3-80
    A
    

    Btw the definition of BitConverter.GetBytes is:

    Converts the numeric value of each element of a specified array of bytes to its equivalent hexadecimal string representation.

提交回复
热议问题