Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# cASP和.Net之间的二进制字符串-为什么它们不同?_C#_.net_Asp Classic_Binary - Fatal编程技术网

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

C# cASP和.Net之间的二进制字符串-为什么它们不同?,c#,.net,asp-classic,binary,C#,.net,Asp Classic,Binary,我正在尝试将二进制字符串(表示文件)从经典ASP(vbscript)传递到.Net方法。这当然非常简单。通过使用一个简单的txt文件进行测试,我们发现数据可以可靠地传递到.Net并进行处理 但是,一旦我们看到包含unicode范围内字符的文件,我们就会发现它们通常会转换为不同的字符,因此文件已损坏。例如: 3Ü£ÜkÜGÝ becomes ýÿýÿýÿýÿ 因此,我创建了两个方法,一个用于在.Net世界(从vb传递)中写出字符串的十六进制,另一个用于在vb世界(源代码)中写出十六进制。以下

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

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

3Ü£ÜkÜGÝ

becomes

ýÿýÿýÿýÿ
因此,我创建了两个方法,一个用于在.Net世界(从vb传递)中写出字符串的十六进制,另一个用于在vb世界(源代码)中写出十六进制。以下是结果(使用上述示例文本)

我们可以看到单词“变成”和最后的字符被完美地带过(ascii字符)。但最初的字符(3ÜkÜGÝ)被转换为:

fd ff fd ff fd ff fd ff
或字符串:

ýÿýÿýÿýÿ
这是怎么回事?这两种语言都支持unicode,是否有一些奇怪的字符串编组?为什么会有这些特殊的角色?谢谢

更新1


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

您使用什么将文本从classic ASP发送到.NET?这只是使用com interop对classic ASP的.NET实例进行方法调用。您在两个应用之间使用相同的代码页吗?Paul-yup我在ASP脚本代码页属性上设置了65001,在请求在.Net中使用的编码。这是一个非常奇怪的问题,它表明我还不了解vbs中的二进制字符串。请发布com互操作调用和定义。这可能是个问题。您可能需要将
MarshalAsAttribute
属性设置为特定的
UnmanagedType
,如中所述
ýÿýÿýÿýÿ