cASP和.Net之间的二进制字符串 - 它们为什么不同?

时间:2015-02-13 18:10:29

标签: c# .net asp-classic binary

我正在尝试将二进制字符串(表示文件)从经典ASP(vbscript)传递到.Net方法。这当然非常简单。使用简单的txt文件进行测试,我们发现数据可以可靠地传递给.Net并使用。

但是,一旦我们到达包含unicode范围内的字符的文件,我们就会看到它们经常转换为不同的字符,因此文件已损坏。例如:

3Ü£ÜkÜGÝ

becomes

ýÿýÿýÿýÿ

所以我创建了几个方法,一个用于写出.Net世界中的字符串的十六进制(从vb传递),另一个用于写出vb世界中的十六进制(源代码)。这是结果(使用上面的示例文本)?

What .Net THINKS we sent it:
fd ff fd ff fd ff fd ff 0d 0a 0d 0a 62 65 63 6f 6d 65 73 0d 0a 0d 0a fd ff fd ff fd ff fd ff 00 
What we REALLY sent it:
33 DC A3 DC 6B DC 47 DD 0D 0A 0D 0A 62 65 63 6F 6D 65 73 0D 0A 0D 0A FD FF FD FF FD FF FD FF 00

我们可以看到“变成”这个词与最终的角色完全一致(ascii chars)。但最初的角色(3Ü£ÜkÜGÝ)被转换为:

fd ff fd ff fd ff fd ff

或字符串:

ýÿýÿýÿýÿ

这里发生了什么?两种语言都支持unicode,是否有一些奇怪的字符串编组发生?为什么这些特殊字符?感谢。

更新1

如果我在文件中使用并将其写成vbscript中的二进制字符串数据,我们会得到í°³。那么那里发生了什么?我可以理解,我们现在有3个字符,因为第一个是单字节,第二个是双字节。但为什么不是 3°³(或类似的东西),为什么 3 转换为í等?如何从此字符串中获取原始数据?当然,如果我说它被编码为ASCII,我会变老 3f 字符。我显然在这里缺少一个基本的理解。

0 个答案:

没有答案