最近、Webサービスコールの秘密鍵をハッシュしたベンダーのサンプルコードがありました。そのサンプルはVB.NETにあり、C#に変換されました。これにより、ハッシングによって異なる入力が生成されました。暗号化の鍵を生成する方法は、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))
VBが149 あなたが使用している場合、他の値が、145のように、などの正しいバイト値であるのに対し、C#の出力は、63であります、出力は一致します。
VBとC#のデフォルトのエンコーダの両方をデバッグすると、SBCSCodePageEncodingになります。
これはなぜですか?
バイト配列を直接初期化することによって修正されていますが、それは最初にあったはずですが、言語固有ではないはずのエンコーダがなぜそうであるかを知りたいのです。
...このC#コードと同じ出力を生成します。http://msdn.microsoftは.com/ja-us/library/613dxh46(VS.80).aspx –
乾杯Jon-さんはちょうどリンクを追加中です。 – RichardOD
ありがとう!私はそれがChr()ビットと関係があると思っていましたが、VB.NETでChr()を使用しないようにする方法がわかりませんでした。 – Annagram