.NET Unicode проблема, наследие vb6 - PullRequest
0 голосов
/ 29 июня 2009

У меня есть процедура расшифровки в VB6. Теперь я хочу такую ​​же расшифровку в C #. Строки, которые нуждаются в расшифровке, находятся в Unicode, поэтому я использую Encoding.Unicode.GetString для чтения ввода в C # Вход теперь выглядит точно так же, как в VB6.

Первые несколько символов в цикле расшифрованы хорошо! Тогда я сталкиваюсь с разницей ... Программа анализирует символ '˜' с индексом, отличным от VB6.

При отладке я вижу следующее в VB и в .Net:
VB6 ˜ = код 152
C # ˜ = код 732

Излишне говорить, что расшифровка не удалась. Мне нужно получить 152 для персонажа, упомянутого выше.

Что здесь не так?

С уважением,

Michel

Ответы [ 3 ]

1 голос
/ 29 июня 2009

Ваш VB6 не читал Unicode (я думаю, на кодовой странице Windows-1252), поэтому он вернулся с другим символьным кодом.

0 голосов
/ 29 июня 2009

Я делал это раньше. Проблема в вашей кодировке. Где .NET - это Unicode, VB6 - это Unifail.

На стороне .NET вам нужно использовать Encoding.ASCII для преобразования ваших строк в байтовые массивы и наоборот.

Encoding.ASCII.GetString(decrypted);
//and
Encoding.ASCII.GetBytes(cleartext);

Итак, когда вы шифруете для отправки в приложение VB, вы должны использовать ASCII.GetBytes, а затем шифровать этот байтовый массив, а когда вы получаете байтовый массив со стороны VB, вы должны расшифровать их и использовать ASCII.GetString для декодировать байты в пригодную для использования строку.

0 голосов
/ 29 июня 2009

Что именно вы подразумеваете под "персонажем 152"?Как вы получили это число?

Обратите внимание, что нахождение в Unicode может означать много разных вещей.Вы уверены, что он закодирован как UTF-16 в двоичных данных?Если бы вы могли опубликовать больше об исходных данных, это было бы очень полезно.

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

...