Недавно мы натолкнулись на пример кода от поставщика для хэширования секретного ключа для вызова веб-службы, его пример был в VB.NET, который мы преобразовали в C #. Это привело к тому, что хеширование произвело различный ввод. Оказывается, они генерировали ключ для шифрования путем преобразования массива char в строку и обратно в байтовый массив. Это привело меня к открытию, что VB.NET и кодировщик C # по умолчанию работают с некоторыми символами по-разному.
C #:
Console.Write(Encoding.Default.GetBytes(new char[] { (char)149 })[0]);
VB:
Dim b As Char() = {Chr(149)}
Console.WriteLine(Encoding.Default.GetBytes(b)(0))
Выход C # равен 63, а VB - правильное значение байта 149.
если вы используете любое другое значение, например 145 и т. д., выходной результат совпадает.
В процессе отладки кодером по умолчанию для VB и C # является SBCSCodePageEncoding.
Кто-нибудь знает, почему это так?
Я исправил пример кода, напрямую инициализировав массив байтов, которым он должен был быть в первую очередь, но я все еще хочу знать, почему кодировщик, который не должен быть специфичным для языка, выглядит именно так. 1015 *