VB6到C#XML字符串转换特殊字符

时间:2012-05-15 11:28:27

标签: c# vb6 xml-serialization special-characters msxml

我一直在使用VB6中的DOMDocument对象(MSXML)来创建和保存具有加密字符串的XML文件。但是,我觉得这个字符串有一些特殊的字符......

<EncryptedPassword>ÆÔ¤ïÎ
    ߯8KHÖN›¢)Þ,qiãÔÙ</EncryptedPassword>

有了这个,我进入我的C#项目,并以UTF-8编码对这个XML文件进行反序列化,并且在该字符串上失败。我已经尝试通过ASCII进行序列化,这会获得更多的字符,但仍然失败。如果我在这个地方放一个纯文本字符串,一切都好! :(

我想也许我最好先将字符串从VB6转换为MD5类型的字符串,然后在.NET中解码MD5字符串然后用特殊字符解密实际字符串,但这是代码的额外步骤所有这一切,希望有人可能对我有更好的想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

您要做的最好的事情是将加密的字符串编码为将使用ASCII字符集的内容。最简单的方法是获取加密的字符串,然后将其编码为Base64,并将此编码值写入XML元素。

在.net中,只需获取XML元素的值并从Base64和'voila'解码,就可以得到你的字符串。

.Net可以轻松解码base64字符串,请参阅:http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx。 (这个页面可能会让它看起来有点复杂)。

VB6没有对Base64编码的原生支持,但谷歌上的快速搜索引发了一些关于如何轻松实现它的例子:

http://www.vbforums.com/showthread.php?t=379072

http://www.nonhostile.com/howto-encode-decode-base64-vb6.asp

http://www.mcmillan.org.nz/Programming/post/Base64-Class.aspx

http://www.freevbcode.com/ShowCode.asp?ID=2038

答案 1 :(得分:0)

我的结论是将这些字符存储在XML文件中是错误的。 VB6允许这样,但.NET没有!因此,我已将字符串转换为符合此链接的Base64数组: -

http://www.nonhostile.com/howto-encode-decode-base64-vb6.asp

现在,在.NET端,该文件将反序列化回我的类,我现在将密码存储为字节数组。然后我将其转换回我需要解密的字符串,这现在似乎引发了另一个问题!

    string password = Encoding.UTF7.GetString(this.EncryptedPassword);

通过这种编码转换,我得到的字符串几乎完全回到我想要的状态,但是有一个小的字符,只是没有正确翻译!然后一位同事找到了一个有最终答案的堆栈溢出帖子!在这种类型的转换中,VB6和.NET之间存在差异。执行以下操作可以解决问题: -

    string password = Encoding.GetEncoding(1252).GetString(this.EncryptedPassword);

感谢所有的帮助,非常感谢。关于此的原始帖子是@ .Net unicode problem, vb6 legacy

相关问题