微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我们最近遇到了一些来自供应商的示例代码,用于散列Web服务调用的密钥,他们的示例是在我们转换为C#的VB.NET中.这导致散列产生不同的输入.事实证明,他们生成加密密钥的方式是将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.

有人知道为什么吗?

我已经通过直接初始化一个字节数组来纠正了示例代码,它本来应该是第一个,但我仍然想知道为什么不应该是语言特定的编码器就是这样.

如果使用ChrW(149),您将得到不同的结果 – 63,与C#相同.
Dim b As Char() = {ChrW(149)}
Console.WriteLine(Encoding.Default.GetBytes(b)(0))

阅读the documentation以查看差异 – 这将解释答案

原文地址:https://www.jb51.cc/vb/255405.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐