c# - 为什么 Encoding.Default.GetBytes() 在 VB.NET 和 C# 中返回不同的结果?

标签 c# vb.net encoding

我们最近从供应商那里看到了一些示例代码,用于对 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/

相关文章:

c# - 在 C# 中测试交互式 ICommand

c# - 检查字符串是否出现在 JValues 列表中

.net - VB .NET SQL 删除查询不起作用

python - 从 HBase 解码 HappyBase 数据

java - 将字节数组解码为 Base64 时出错,其中包含 '-' 和 '_' 等字符

c# - 将 JSON 数据路由到 Azure 中的事件中心

.net - 在多行文本框中格式化字符串

c# - 调用 Web 服务时出现类型未定义错误

node.js - NodeJS 编码问题

c# - 通过在 C# 中传递 null 的选项将枚举传递给函数的简洁方法