Почему Кодирование. Значение по умолчанию. GetBytes () возвращает различные результаты в VB.NET и C#?

К сожалению, нет, он должен поддерживать этот размер. У нас была такая же проблема. Хотелось бы дать вам более полный ответ, однако для точного профилирования рендеринга кажется разумным, чтобы он поддерживал соотношение пикселей 1 к 1, в противном случае пришлось бы подбирать пиксели, что приводит к неправильному профилированию.

Обновление

Это больше не правильный ответ.

7
задан Annagram 29 May 2009 в 19:12
поделиться

5 ответов

Если вы используете ChrW (149) вы получите другой результат - 63, такой же, как в C #.

Dim b As Char() = {ChrW(149)}
Console.WriteLine(Encoding.Default.GetBytes(b)(0))

Прочтите документацию , чтобы увидеть разницу - это объяснит ответ

10
ответ дан 6 December 2019 в 14:09
поделиться

Кодировка по умолчанию зависит как от машины, так и от потока, поскольку использует текущую кодовую страницу. Обычно вам следует использовать что-то вроде Encoding.UTF8, чтобы не беспокоиться о том, что происходит, когда одна машина использует Unicode, а другая - 1252-ANSI.

0
ответ дан 6 December 2019 в 14:09
поделиться

Функция VB Chr принимает аргумент в диапазоне от 0 до 255 и преобразует его в символ, используя текущую кодовую страницу по умолчанию. Он вызовет исключение, если вы передадите аргумент за пределами этого диапазона.

ChrW примет 16-битное значение и вернет соответствующее значение System.Char без использования кодировки - следовательно, даст тот же результат, что и опубликованный вами код C # .

Приблизительный эквивалент вашего кода VB на C # без использования класса VB Strings (который содержит Chr и ChrW) будет выглядеть так:

char[] chars = Encoding.Default.GetChars(new byte[] { 149 });
Console.Write(Encoding.Default.GetBytes(chars)[0]);
5
ответ дан 6 December 2019 в 14:09
поделиться

Различные операционные системы могут использовать разные кодировки по умолчанию. Следовательно, данные, передаваемые из одного операционная система в другую может быть переведено неправильно. Чтобы гарантировать, что закодированные байты декодируются правильно, ваше приложение должно использовать кодировка Unicode, то есть UTF8Encoding, UnicodeEncoding или UTF32Encoding с преамбулой. Другой вариант - использовать протокол более высокого уровня, чтобы гарантировать, что тот же формат используется для кодирования и декодирование.

из http://msdn.microsoft.com/en-us/library/system.text.encoding.default.aspx

можете ли вы проверить, что производит каждый язык при явном кодировании с использованием utf8?

0
ответ дан 6 December 2019 в 14:09
поделиться

Я считаю, что эквивалент в VB - ChrW (149).

Итак, этот код VB ...

    Dim c As Char() = New Char() { Chr(149) }
    'Dim c As Char() = New Char() { ChrW(149) }
    Dim b As Byte() = System.Text.Encoding.Default.GetBytes(c)
    Console.WriteLine("{0}", Convert.ToInt32(c(0)))
    Console.WriteLine("{0}", CInt(b(0)))

дает тот же результат, что и этот код C # ...

    var c = new char[] { (char)149 };
    var b = System.Text.Encoding.Default.GetBytes(c);
    Console.WriteLine("{0}", (int)c[0]);  
    Console.WriteLine("{0}", (int) b[0]);
0
ответ дан 6 December 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: