【发布时间】:2009-05-29 19:12:17
【问题描述】:
我们最近遇到了一些来自供应商的示例代码,用于对 Web 服务调用的密钥进行哈希处理,他们的示例在 VB.NET 中,我们将其转换为 C#。这导致散列产生不同的输入。事实证明,他们生成加密密钥的方式是将 char 数组转换为字符串,然后再转换回字节数组。这让我发现 VB.NET 和 C# 的默认编码器对某些字符的工作方式不同。
C#:
Console.Write(Encoding.Default.GetBytes(new char[] { (char)149 })[0]);
VB:
Dim b As Char() = {Chr(149)}
Console.WriteLine(Encoding.Default.GetBytes(b)(0))
C# 输出是 63,而 VB 是正确的字节值 149。 如果您使用任何其他值,例如 145 等,则输出匹配。
通过调试,VB和C#默认编码器都是SBCSCodePageEncoding。
有人知道这是为什么吗?
我已经通过直接初始化一个字节数组来更正示例代码,它应该首先是,但我仍然想知道为什么不应该是特定于语言的编码器看起来就是那样。
【问题讨论】: