为什么Encoding.Default.GetBytes()在VB.NET和C#中返回不同的结
发布时间:2020-12-17 00:20:32 所属栏目:大数据 来源:网络整理
导读:我们最近遇到了一些来自供应商的示例代码,用于散列Web服务调用的密钥,他们的示例是在我们转换为C#的VB.NET中.这导致散列产生不同的输入.事实证明,他们生成加密密钥的方式是将char数组转换为字符串并返回字节数组.这让我发现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的正确字节值. 通过调试,VB和C#默认编码器都是SBCSCodePageEncoding. 有人知道为什么吗? 我已经通过直接初始化一个字节数组来纠正了示例代码,它本来应该是第一个,但我仍然想知道为什么不应该是语言特定的编码器就是这样.
如果使用ChrW(149),您将得到不同的结果 – 63,与C#相同.
Dim b As Char() = {ChrW(149)} Console.WriteLine(Encoding.Default.GetBytes(b)(0)) 阅读the documentation以查看差异 – 这将解释答案 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |