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