我們最近遇到了一些供應商的示例代碼,用於散列Web服務調用的密鑰,他們的示例是在我們轉換爲C#的VB.NET中。這導致哈希產生不同的輸入。事實證明,他們爲加密生成密鑰的方式是將char數組轉換爲字符串並返回到字節數組。這讓我發現VB.NET和C#的默認編碼器與某些字符的工作方式不同。爲什麼Encoding.Default.GetBytes()在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。
有誰知道這是爲什麼?
我已經通過直接初始化一個字節數組來糾正示例代碼,它應該放在第一位,但我仍然想知道爲什麼編碼器不應該是語言特定的,看起來就是這樣。
下面是對文件的鏈接:http://msdn.microsoft .com/en-us/library/613dxh46(VS.80).aspx – 2009-05-29 19:25:47