我们最近从供应商那里看到了一些示例代码,用于对 Web 服务调用的 key 进行哈希处理,他们的示例是在 VB.NET 中,我们将其转换为 C#。这导致散列产生不同的输入。事实证明,他们生成加密 key 的方式是将字符数组转换为字符串,然后再转换回字节数组。这让我发现 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。
谁知道这是为什么?
我已经通过直接初始化一个字节数组来更正示例代码,它本来应该放在首位,但我仍然想知道为什么编码器,它不应该是特定于语言的,似乎只是那样。
最佳答案
如果您使用 ChrW(149),您将得到不同的结果 - 63,与 C# 相同。
Dim b As Char() = {ChrW(149)}
Console.WriteLine(Encoding.Default.GetBytes(b)(0))
阅读the documentation看看差异-这将解释答案
关于c# - 为什么 Encoding.Default.GetBytes() 在 VB.NET 和 C# 中返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/927652/