.Net unicode问题,vb6遗产

时间:2009-06-29 13:22:33

标签: .net unicode vb6-migration codepages

我在VB6中有一个解密例程。我现在想要在C#中进行相同的解密。 需要解密的字符串是unicode,所以我使用Encoding.Unicode.GetString来读取C#中的输入。输入现在看起来与VB6完全相同。

循环中的前几个字符被解密了!然后我遇到了一个不同...... 程序使用与VB6不同的索引解析字符'〜'。

调试时我在VB和.Net中看到以下内容:
VB6~ =代码152
C#〜=代码732

毋庸置疑,解密失败了。我需要为上面提到的角色获得152分。

这里有什么问题?

此致

米歇尔

3 个答案:

答案 0 :(得分:1)

你的VB6没有读取Unicode(我猜在Windows-1252代码页中),这就是为什么它会返回不同的字符代码。

答案 1 :(得分:0)

“角色152”究竟是什么意思?你是怎么得到这个号码的?

请注意,“在Unicode中”可能意味着许多不同的东西。你确定它在二进制数据中被编码为UTF-16吗?如果您可以发布有关源数据的更多信息,那将非常有用。

此外,加密和解密几乎总是使用字节而不是字符来完成。虽然我知道您需要重现遗留行为,但您应该尝试逐渐将字符串视为不透明的二进制数据。

答案 2 :(得分:0)

我以前做过这个。问题出在您的编码中。 .NET是unicode,VB6是Unifail。

在.NET端,您需要使用Encoding.ASCII将字符串转换为字节数组,反之亦然。

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

因此,当你加密发送到VB应用程序时,你必须使用ASCII.GetBytes然后加密那个字节数组,当你从VB端获得一个字节数组时,你必须解密它们并使用ASCII.GetString来将字节解码为可用的字符串。